Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.02;
Скачать: CL | DM;

Вниз

Как поставить Hook   Найти похожие ветки 

 
sucer   (2003-03-23 15:46) [0]

Как поставить Hook на другую программу перехватывающий сообщение разворачивания окна(WM_Maximize) и атикации(получения фокуса)?


 
sucer   (2003-03-23 15:48) [1]

Под WinXP


 
Song ©   (2003-03-23 16:46) [2]

SetWindowsHookEx()


 
sucer   (2003-03-25 01:45) [3]

А примерчик,можно?


 
Pogi   (2003-03-28 19:59) [4]

Этот Hook ловит все сообщения, передаваемые в оконные процедуры указанного потока (или всей системы, если threadID=0). Hook должен быть в DLL. Start может вызываться из приложения. Hook не видит глобальные переменные DLL (в смысле они у него переинициализируются). Ну и читай SDK. Проверит Hook можно только путем записи в файл из тела hooka.

procedure Start;
begin
theHook:=SetWindowsHookEx(WH_CALLWNDPROC, @HookProc, hInstance, threadID);
if theHook=0 then (Error);
end;

function HookProc(code:integer;w: WPARAM;l:LPARAM):LRESULT;stdcall;
var p:PCWPRETSTRUCT;
begin
p:=PCWPRETSTRUCT(l);
if code<0 then
begin
result:=CallNextHookEx(theHook, Code, w, l);
exit;
end
else if(code=0)then
begin
case p.message of
WM_MAXIMIZE:
begin
...
end;
WM_SETFOCUS:

end;
Result:=0;
end;
end;


 
sucer   (2003-03-30 13:36) [5]

За код спасибо.
Сечас проблема в установке HOOK-a.
HOOK процедура как и положена находится в DLL.
Написал отельную прогу "SPO",для теста.Запустил.
Запустил прогу для установки HOOK.
При устанавливки HOOK-а на окно "SPO" следующим кодом:
-----------
hh:=FindWindow("TfrmMain","SPO");
if hh=0 then
begin
MessageBox(0, "No Window", "Error:", 0);
Exit;
end;
dwProcessId:=0;
GetWindowThreadProcessId(hh, @dwProcessId);
SysHook := SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProc,Instance, dwProcessId);
-----
В SysHook HOOK возращяется 0 т.е не хочет он устанвалваться,
хотя окно находит и dwProcessID<>0.В чем может быть ошибка?
Может что-то с GetWindowThreadProcessId не то?




 
Pogi   (2003-04-04 17:47) [6]

Да, еще забыл сказать,что HooK-функция должна быть STDCALL. Ну в смысле тип функции:
function XXXX(...):...;stdcall;


 
Юрий Зотов ©   (2003-04-05 07:30) [7]

> sucer (30.03.03 13:36)
> Может что-то с GetWindowThreadProcessId не то?

Как и обычно, виноват драйвер Hands.sys.
SetWindowsHookEx требует идентификатор потока, а не процесса.


 
sucer   (2003-04-05 08:46) [8]

Я разобрался.У меня
GetWindowThreadProcessId(hh, @dwProcessId)-неправильно
вызывался.Надо dwProcessId:=GetWindowThreadProcessId(hh, nil);



Страницы: 1 вся ветка

Текущий архив: 2003.06.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
1-3012
Вадим
2003-05-21 16:27
2003.06.02
Иконка пункта меню в run-time


6-3033
Duke DEE
2003-04-01 17:16
2003.06.02
TWebBrowser


14-3148
Михайлов Антон
2003-05-15 10:25
2003.06.02
BruteForce


3-2824
mcmax
2003-05-14 16:08
2003.06.02
перекрестные SQL-запросы


1-2885
Vulko
2003-05-20 15:23
2003.06.02
Как сохранить текст из RichEdit в файл?