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

 



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

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

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

Не могу отловить 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  
Старый 29.01.2019, 12:00
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Отвечу немного сам себе. Я зачем-то обрабатываю ncode. вот только в
Код:
 
  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
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Все еще ничего не проходит. Неужели никто не знает?
Код:
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.
Ответить с цитированием
Ответ



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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter