Сейчас на форуме: tyns777 (+3 невидимых)

 eXeL@B —› Программирование —› about Global hooks с блокировкой обработки
Посл.ответ Сообщение

Ранг: 11.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 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.

чет нифига не выходит, блокнот не печатает символы



Ранг: 110.7 (ветеран)
Активность: 0.070
Статус: Участник
~ tPORt ~

Создано: 23 октября 2009 14:04 · Поправил: LazzY
· Личное сообщение · #2

вы неверно шлете WM_CHAR. lParam заполните



Ранг: 11.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 23 октября 2009 17:47
· Личное сообщение · #3

подскажите плиз где гуглнуть ? с Wparam разобрался, что там должен быть виртуальный код кнопки!
Но может я вообще не то делаю, так как мне надо послать окну именно нажатие кнопки



Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 24 октября 2009 03:06
· Личное сообщение · #4

LazzY пишет:
lParam заполните

В случае с блокнотом можно и с нулевым.

3uM6a6Ba пишет:
wnd:=findwindow('notepad',nil);

Надо слать не главному окну блокнота (класс Notepad), а текстовому полю блокнота (класс Edit).


 eXeL@B —› Программирование —› about Global hooks с блокировкой обработки
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати