![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема в установке Hook [D6, WinXP]
mm0 © (2003-04-01 12:07:00)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.В чем может быть ошибка?
Morfein (2003-04-01 20:28:00) [1]Что значит где ошибка?! Ты передаёшь функции SetWindowsHookEx ИДЕНТИФИКАТОР ПРОЦЕССА, а не идентификатор потока!
Для твоего случая код:
var
SysHook : hHook;
dwThreadId : dword;
...
...
dwThreadId:=GetWindowThreadProcessId(hh, nil);
SysHook:=SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProc, Instance, dwThreadId);
mm2 (2003-04-01 16:40:00) [2]Удалено модератором
Примечание: Разборки с модератором
Polevi (2003-04-01 14:59:00) [3]Удалено модератором
Примечание: Offtopic
mmo (2003-04-01 14:27:00) [4]Удалено модератором
Примечание: Offtopic
Polevi (2003-04-01 12:59:00) [5]The hMod parameter must be set to NULL if the dwThreadId parameter specifies a thread created by the current process and if the hook procedure is within the code associated with the current process.
и GetLastError полезно смотреть иногда
if SetWindowsHookEx(..)=0 then
RaiseLastWin32Error;