Главная страница
    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.007 c
3-2780
Дмитрий_Б
2003-05-14 11:22
2003.06.02
Вопрос по IB


7-3198
Makhanev A.S.
2003-03-30 22:01
2003.06.02
Насчёт манифеста XP


8-3015
NAlexey
2003-02-14 17:19
2003.06.02
Работа с HBitmap


4-3207
Stexen
2003-04-02 18:25
2003.06.02
Запуск exe-файла.


14-3092
Deus
2003-05-13 16:42
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский