Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.01 c
1-4861
Groove
2003-01-24 16:47
2003.02.03
Как вставить табуляцию в TStringList?


3-4751
dahs78
2003-01-15 14:38
2003.02.03
Работа с гридом


3-4795
elektro
2003-01-17 10:46
2003.02.03
Запрос в Local SQL


7-5285
cutter-pro
2002-11-19 15:28
2003.02.03
ЧЕРНЫЙ ЭКРАН СМЕРТИ :(


8-5073
Cdjq, yj yt xe;jq
2002-10-18 02:52
2003.02.03
Прогресс




   Наверх