Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];

Вниз

Как поставить 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
1-2883
qwerty2
2003-05-22 16:20
2003.06.02
Несовместисые типы. Почему?


14-3136
Alex134
2003-05-14 20:34
2003.06.02
Turbo Vision


3-2794
moore
2003-05-14 15:17
2003.06.02
пример БД


14-3098
OlegBat
2003-05-14 09:37
2003.06.02
Есть спецы по EhLib - конкретнее по DBGridEh ?


6-3042
DukeNukem
2003-04-01 17:40
2003.06.02
Работа с IMAP4





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский