Сейчас на форуме: tyns777 (+3 невидимых) |
eXeL@B —› Программирование —› about Global hooks с блокировкой обработки |
Посл.ответ | Сообщение |
|
Создано: 23 октября 2009 13:18 · Личное сообщение · #1 Смысл в том, что известен хендл окна, которому надо послать нажатие кнопок, только тех, которых этому приложению нужно обработать, а остальные игнорить!!! делаю так library hook_dll1; uses Windows, Messages, Forms,SysUtils; const key_down=$40000000; var Wnd : Hwnd =0; syshook:integer; function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall; var f:textfile; begin assignfile(f,'C:\log.log'); append(f); Result := CallNextHookEx(SysHook, Code, wParam, lParam); wnd:=findwindow('notepad',nil); if code = HC_ACTION then if lParam or key_down = lParam // если клавиша нажата then begin if wnd>0 then begin writeln(f,inttostr(wnd)+'-'+(chr(wParam))) ; SendMessage(wnd,WM_CHAR,wparam,0); result:=0; end; end else Result := CallNextHookEx(SysHook, Code, wParam, lParam); closefile(f); end; { Процедура установки HOOK-а} procedure hook(switch : Boolean) export; stdcall; begin if switch=true then begin SysHook :=SetWindowsHookEx(WH_KEYBOARD, @SysMsgProc, HInstance, 0); end else begin UnhookWindowsHookEx(SysHook); SysHook :=0; end; end; exports hook; begin end. чет нифига не выходит, блокнот не печатает символы |
|
Создано: 23 октября 2009 14:04 · Поправил: LazzY · Личное сообщение · #2 |
|
Создано: 23 октября 2009 17:47 · Личное сообщение · #3 |
|
Создано: 24 октября 2009 03:06 · Личное сообщение · #4 |
eXeL@B —› Программирование —› about Global hooks с блокировкой обработки |