Форум: "WinAPI";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];
ВнизЛокальные 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c