Сейчас на форуме: rmn, Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+5 невидимых) |
![]() |
eXeL@B —› Программирование —› Как определить какая клавиша была нажата(Delphi API) |
Посл.ответ | Сообщение |
|
Создано: 04 сентября 2008 21:39 · Личное сообщение · #1 |
|
Создано: 04 сентября 2008 22:22 · Личное сообщение · #2 |
|
Создано: 04 сентября 2008 22:22 · Личное сообщение · #3 |
|
Создано: 04 сентября 2008 22:34 · Личное сообщение · #4 |
|
Создано: 04 сентября 2008 23:10 · Личное сообщение · #5 SetWindowLong( hwnd, GWL_WNDPROC, (LONG)MyWndProc ); ... LRESULT CALLBACK MyWndProc(HWND wnd, UINT message, WPARAM wParam, LPARAM lParam) { if (WM_COMMAND == message && BN_CLICKED == <тут сравнивать надпись кнопки> ) { } return CallWindowProc( (WNDPROC)g_wndProc, wnd, message, wParam, lParam ); } ----- HOW MUCH BLOOD WOULD YOU SHED TO STAY ALIVE ![]() |
|
Создано: 05 сентября 2008 00:43 · Личное сообщение · #6 |
|
Создано: 05 сентября 2008 07:49 · Личное сообщение · #7 |
|
Создано: 05 сентября 2008 09:09 · Личное сообщение · #8 |
|
Создано: 05 сентября 2008 10:56 · Личное сообщение · #9 borov пишет: ProTeuS, что то по твоему у меня не получается да сорцов тьма, уже готовых реализаций. вот в гугль вбил, первая же ссылка, семпл кода только события минимизации окна, копипасть и нотифай меняй на бтн_клик вместо минимайз forum.codenet.ru/archive/index.php/t-42110.html ----- HOW MUCH BLOOD WOULD YOU SHED TO STAY ALIVE ![]() |
|
Создано: 05 сентября 2008 10:59 · Личное сообщение · #10 ах да, ты же не написал какую кнопку в каком процессе ловишь. я бы советовал либой скомпилить, ставить SetWindowsHook а там уже устанавливать свой обработчик на все принимаемые нотифаи от всех окон, либо же фильтровать по красу, событию, процессу-родителю, либо еще каким параметрам ----- HOW MUCH BLOOD WOULD YOU SHED TO STAY ALIVE ![]() |
|
Создано: 05 сентября 2008 11:39 · Личное сообщение · #11 |
|
Создано: 05 сентября 2008 14:58 · Поправил: borov · Личное сообщение · #12 ClockMan пишет: решил клавеатурный шпион сделать не как нет ProTeuS пишет: ты же не написал какую кнопку в каком процессе ловишь Извини, моя задача была: я в своей програме должен был набирать текст в ЭДИТЕ и по нажатию Enter'a: выполнить то что набрал, и очистить ЭДИТ, как бы все. В итоге возникли такие проблемы: - отловить нажатие клавиш (решил, но возникла следующая проблема...) - отловить нажатие клавиш при вводе текста в ЭДИТЕ (вот с этим и парился) - ... (возможно что то еще найду) Я решил это все так: [code] function MainDlgProc(hDlg: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): bool; stdcall; begin case uMsg of WM_INITDIALOG: . . . // Регистрирую Enter как горячую клавишу SendMessage(GetDlgItem(hDlg, eCommand), HKM_SETHOTKEY, VK_RETURN, 0); RegisterHotKey(hDlg, VK_RETURN, 0, VK_RETURN); . . . WM_HOTKEY: // Поверяю чтобы был нажат Enter в ЭДИТЕ if (loword(wParam) = vk_return)and(GetFocus = GetDlgItem(hDlg, eCommand)) then begin // Например GetDlgItemText(hDlg, eCommand, szComamnd, 128); MessageBox(0, szCommand, '', 32); SetDlgItemText(hDlg, eCommand, ''); . . . UnRegisterHotKey(hDlg, VK_RETURN); end; WM_DESTROY, WM_CLOSE: begin UnRegisterHotKey(hDlg, VK_RETURN); . . . end; [/code] З.Ы. Я думаю это самый оптимальный вариант ![]() ![]() З.Ы.2 В разделе "Софт, варез" есть топик "Console Viewer by BoRoV" в котором я выложил то из-за чего все это начилось. Реклама ![]() ----- Лучше быть одиноким, но свободным © $me ![]() |
|
Создано: 08 сентября 2008 18:36 · Личное сообщение · #13 |
![]() |
eXeL@B —› Программирование —› Как определить какая клавиша была нажата(Delphi API) |
Эта тема закрыта. Ответы больше не принимаются. |