Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Локальные 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()
Для других случаев это будет уже глобальный хук.


Наверх

Титульная страница Поиск, карта сайта Написать письмо