![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Локальные hook и [D5, Win95/98, WinME]
R4D][ © (2002-12-18 17:58:00)Подскажите, пожалуйста, как найти ThreadID, по известному хэндлу.
И, вообще что этот самый ThreadID за зверь такой и чем он от хэндла отличается. Я пытался установить локальную ловушку, но при указание в последнем параметре SetWindowsHookExне 0, а хэндл, функция возвращает 0. Все остальные праметры вроде верны. В чем дело?
R4D][ (2002-12-19 16:26:00) [1]Да, попробуй следующий исходник:
program Ex;
uses
Windows,
Messages;
var
HookH: HWND;
HandleOfHook: HWND;
ThreadOfEx: HWND;
function MsgProc(code: Integer; wparam: WParam; lparam: LParam):LResult; stdcall;
begin
if code=HC_ACTION then
begin
if TMsg(Pointer(lparam)^).message=WM_USER+50 then
MessageBox(0,"That"s work!!!","!!!",mb_ok);
end;
Result:=CallNextHookEx(HookH, Code, wParam, lParam);
end;
begin
HandleOfHook:=FindWindow(nil,"OleChannelWnd");
ThreadOfEx:=GetWindowThreadProcessId(HandleOfHook,0);
if ThreadOfEx=0 then MessageBox(0,"Couldn"t find Explorer","?",mb_ok);
HookH:=SetWindowsHookEx(WH_GETMESSAGE,@MsgProc,HInstance,ThreadOfEx);
if HookH=0 then MessageBox(0,"Couldn"t set hook","?",mb_ok);
PostMessage(HandleOfHook,WM_USER+50,0,0);
sleep(10);
UnhookWindowsHookEx(HookH);
end.
Song (2002-12-19 16:24:00) [2]Что ставится хук на чужое приложение, а call-back ф-ия находится в твоём приложении?
R4D][ (2002-12-19 16:20:00) [3]Я тут зашел на SRv.by.ru и все же нашел эту функцию - GetWindowThreadProcessId. Попробовал - работает, так что Song имей в виду, а вообще спасибо, что внимание обратили на мое сообщение.
R4D][ (2002-12-19 15:51:00) [4]Thanks.
Игорь Шевченко (2002-12-19 15:43:00) [5]R4D][ (19.12.02 15:41)
ToolHelp, PSApi
Song (2002-12-19 15:43:00) [6]Для того чтобы установить хук на чужое приложение (хоть на одно, хоть на 100) нужен глобальный хук.
R4D][ (2002-12-19 15:41:00) [7]Но мне хотелось бы узнать, как установить hook на одно чужое приложение. А GetCurrentThreadIDвозвращает ID текущего процесса aka моего. Нет ли функции, которая возвращает ThreadID чужого процесса?
Song (2002-12-18 21:34:00) [8]Для локального хука это должно GetCurrentThreadID()
Для других случаев это будет уже глобальный хук.