![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Есть некий процесс, который периодически делает 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. |