Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.01.2019, 11:55
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 280
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию Hook SetWindowsPos чужого процесса

Есть некий процесс, который периодически делает BringToFront своей дочерней формы. Как это можно отменить?
Ответить с цитированием
  #2  
Старый 28.01.2019, 19:16
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 280
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Не могу отловить WM_WINDOWPOSCHANGING
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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  
Старый 29.01.2019, 12:00
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 280
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Отвечу немного сам себе. Я зачем-то обрабатываю ncode. вот только в
Код:
1
2
3
4
case pmsg(lparam)^.message of
  
  WM_WINDOWPOSCHANGING:  SendMessage(AppWnd, MYWM_WINDOWPOSCHANGING, wParam, 0);
end;
тоже ничего не дает.
Ответить с цитированием
  #4  
Старый 30.01.2019, 20:29
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 280
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Все еще ничего не проходит. Неужели никто не знает?
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:20.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025