Главная страница
    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.009 c
14-3108
Vlad Oshin
2003-05-14 15:40
2003.06.02
Что я вижу в FAQ? :-о


3-2758
Alex(Lion)
2003-05-13 17:31
2003.06.02
Как на Label1.Capiton повесить количество записей в DBGrid1


1-2862
Shutoff
2003-05-22 09:57
2003.06.02
MSExcel2000 vs BCB5


14-3109
Style
2003-05-14 11:34
2003.06.02
Delphi Challenge - Народ добавил раздел конкурсы и раздел ссылки


7-3193
Aleksandr
2003-04-01 11:56
2003.06.02
А надо ли как-то убивать Мьютекс по завершении работы?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский