Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.03;
Скачать: CL | DM;

Вниз

Локальные hook и   Найти похожие ветки 

 
R4D][   (2002-12-18 17:58) [0]

Подскажите, пожалуйста, как найти ThreadID, по известному хэндлу.
И, вообще что этот самый ThreadID за зверь такой и чем он от хэндла отличается. Я пытался установить локальную ловушку, но при указание в последнем параметре SetWindowsHookEx не 0, а хэндл, функция возвращает 0. Все остальные праметры вроде верны. В чем дело?


 
Song ©   (2002-12-18 21:34) [1]

Для локального хука это должно GetCurrentThreadID()
Для других случаев это будет уже глобальный хук.


 
R4D][   (2002-12-19 15:41) [2]

Но мне хотелось бы узнать, как установить hook на одно чужое приложение. А GetCurrentThreadID возвращает ID текущего процесса aka моего. Нет ли функции, которая возвращает ThreadID чужого процесса?


 
Игорь Шевченко ©   (2002-12-19 15:43) [3]

R4D][ (19.12.02 15:41)

ToolHelp, PSApi


 
Song ©   (2002-12-19 15:43) [4]

Для того чтобы установить хук на чужое приложение (хоть на одно, хоть на 100) нужен глобальный хук.


 
R4D][   (2002-12-19 15:51) [5]

Thanks.


 
R4D][   (2002-12-19 16:20) [6]

Я тут зашел на SRv.by.ru и все же нашел эту функцию - GetWindowThreadProcessId. Попробовал - работает, так что Song имей в виду, а вообще спасибо, что внимание обратили на мое сообщение.


 
Song ©   (2002-12-19 16:24) [7]

Что ставится хук на чужое приложение, а call-back ф-ия находится в твоём приложении?


 
R4D][   (2002-12-19 16:26) [8]

Да, попробуй следующий исходник:
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.



Страницы: 1 вся ветка

Текущий архив: 2003.02.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
3-4807
Dbrf
2003-01-16 15:50
2003.02.03
Работа программы в сети


3-4708
БД
2003-01-18 08:22
2003.02.03
Plese help me now!


1-5044
Azim
2003-01-24 10:35
2003.02.03
DBGrid


3-4706
dolmat
2003-01-15 11:10
2003.02.03
qreport


14-5267
KME
2003-01-16 20:44
2003.02.03
Сталинградская Битва