|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Hook SetWindowsPos чужого процесса
Есть некий процесс, который периодически делает BringToFront своей дочерней формы. Как это можно отменить?
|
#2
|
|||
|
|||
Не могу отловить WM_WINDOWPOSCHANGING
Код:
function HookProc(nCode: integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var wnd: integer; begin ... if (nCode < 0) then begin Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); end; case nCode of WM_WINDOWPOSCHANGING: SendMessage(AppWnd, MYWM_WINDOWPOSCHANGING, wParam, 0); end; //Передаём сообщение дальше по цепочке hook-ов Result := CallNextHookEx(HookHandle, nCode, wParam, lParam); end; procedure SetHook(wnd: integer); export; stdcall; begin HookHandle := SetWindowsHookEx(WH_CALLWNDPROC, @HookProc, HInstance, 0); ... end; procedure DellHook; export; stdcall; begin UnHookWindowsHookEx(HookHandle); end; exports SetHook, DellHook; Последний раз редактировалось nixon232, 28.01.2019 в 19:32. |
#3
|
|||
|
|||
Отвечу немного сам себе. Я зачем-то обрабатываю ncode. вот только в
Код:
case pmsg(lparam)^.message of WM_WINDOWPOSCHANGING: SendMessage(AppWnd, MYWM_WINDOWPOSCHANGING, wParam, 0); end; |
#4
|
|||
|
|||
Все еще ничего не проходит. Неужели никто не знает?
Код:
SAS; uses System.SysUtils, System.Classes, Winapi.Windows, Winapi.Messages; {$R *.res} type TMessageHookCallback = procedure(const Msg:TMsg) of object; var HookHandle: Cardinal; CallbackProc: TMessageHookCallback; function GetMsgProc(code: integer; wParam: WPARAM; lParam: LPARAM): LResult; stdcall; begin if (code = HC_ACTION) and Assigned(CallbackProc) then // Тут бываем if PMsg(lParam)^.message = WM_WINDOWPOSCHANGING then // и тут CallbackProc(PMsg(lParam)^); // а тут нет... Result := CallNextHookEx(HookHandle, Code, wParam, lParam); end; procedure DisableMessageHook; stdcall; begin CallbackProc := nil; if HookHandle <> 0 then begin UnhookWindowsHookEx(HookHandle); HookHandle := 0; end; end; procedure EnableMessageHook(ACallbackProc: TMessageHookCallback); stdcall; begin DisableMessageHook; CallbackProc := ACallbackProc; HookHandle := SetWindowsHookEx(WH_GETMESSAGE, @GetMsgProc, hInstance, 0); if HookHandle = 0 then RaiseLastOsError; end; exports GetMsgProc, EnableMessageHook, DisableMessageHook; end. |