Главная страница
    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
9-2732
Namo
2002-12-20 20:42
2003.06.02
Либо я совсем идиот...


1-2850
Apachi
2003-05-21 20:49
2003.06.02
TTreeView


14-3052
Mrk
2003-05-15 23:59
2003.06.02
RX library for Delphi6


3-2785
Lamer
2003-05-13 17:44
2003.06.02
locaseinsencitive


14-3147
Dimaz-z
2003-05-14 13:27
2003.06.02
Народ, как вы относитесь к Microsoft? Выскажитесь!





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