Вниз
Скачать: CL | DM;

Перехват всех сообщений программы   Найти похожие ветки 

← →
Dextor ©   (2005-05-23 17:27) [0]

Добрый день !!! Подскажите пожалуйста, как можно перехватить все сообщения программы на протежение всей ее работы ??? Благодарен зареннее, даже если не подскажите )) !!!


← →
Eraser ©   (2005-05-23 17:46) [1]

Dextor ©   (23.05.05 17:27)

1. Application.OnMessage
2. Подмена процедуры обработки сообщений конкретного окна.

Необходимо применять эти два способа одновременно.


← →
Marser ©   (2005-05-23 17:57) [2]


> Необходимо применять эти два способа одновременно.

Вовсе нет. Первый способ самодостаточен.


← →
Kerk ©   (2005-05-23 18:05) [3]

Marser ©   (23.05.05 17:57) [2]

OnMessage only receives messages that are posted to the message queue, not those sent directly with the Windows API SendMessage function.


← →
Eraser ©   (2005-05-23 18:05) [4]

Marser ©   (23.05.05 17:57) [2]

Note: OnMessage only receives messages that are posted to the message queue, not those sent directly with the Windows API SendMessage function.


← →
Eraser ©   (2005-05-23 18:05) [5]

Kerk ©   (23.05.05 18:05) [3]

))


← →
GuAV ©   (2005-05-23 18:08) [6]

хук


← →
Eraser ©   (2005-05-23 18:15) [7]

GuAV ©   (23.05.05 18:08) [6]

Тогда опять таки два хука ставить прийдётся...


← →
Игорь Шевченко ©   (2005-05-23 18:16) [8]

Заменой WindowProc нужного(ых) TControl


← →
GuAV ©   (2005-05-23 18:31) [9]

Eraser ©   (23.05.05 18:15) [7]

Не два, а столько, сколько потоков.


← →
Eraser ©   (2005-05-23 18:36) [10]

GuAV ©   (23.05.05 18:31) [9]

Тогда

столько, сколько потоков * 2


← →
Marser ©   (2005-05-23 18:39) [11]

Уболтали. Но тогда первый пункт не нужен :-)


← →
Eraser ©   (2005-05-23 18:41) [12]

Marser ©   (23.05.05 18:39) [11]

Тогда и второй не нужен )


← →
alpet ©   (2005-05-23 18:49) [13]

Внутренние сообщения VCL хук не поймает, или автору нужны только те что генерятся самой системой?


← →
Игорь Шевченко ©   (2005-05-23 18:55) [14]

Я делал так:

unit HSControlMessagePumpHook;

interface
uses
 HSObjectList, Controls, Messages;

type
 THSControlMessagePumpHook = class
 private
   FControl: TControl;
   FOldWndProc: TWndMethod;
   procedure HookWndProc (var Message: TMessage);
 public
   constructor Create (AControl: TControl);
 end;

 THSControlMessagePumpHookList = class(THSObjectList)
 end;

const EnableMsgHook = true;

implementation
uses
 Windows, SysUtils, MessageLogger;

{ THSControlMessagePumpHook }

constructor THSControlMessagePumpHook.Create(AControl: TControl);
begin
 FControl := AControl;
 FOldWndProc := FControl.WindowProc;
 FControl.WindowProc := HookWndProc;
end;

procedure THSControlMessagePumpHook.HookWndProc(var Message: TMessage);
begin
 if Assigned(FControl) and (FControl is TWinControl) and
    TWinControl(FControl).HandleAllocated then
   LogMessage(Format("%s.WndProc", [FControl.Name]),
              TWinControl(FControl).Handle, Message.Msg,
              Message.WParam, Message.LParam)
 else
   LogMessage(Format("%s.WndProc", [FControl.Name]),
              0, Message.Msg,
              Message.WParam, Message.LParam);
 FOldWndProc(Message);
 LogMsgReturn(Format("%s.WndProc", [FControl.Name]), Message);
end;

end.


В той форме(ах), поведение которых при различных сообщениях мне нужно было изучить, вставлялся следующий код:

type
 TForm1 = class(TForm)
   ....
 private
   FHooks: THSControlMessagePumpHookList;
 protected
   procedure Loaded; override;
  ...
 end;

........

procedure TForm1.Loaded;
var
 I: Integer;
begin
 inherited;
 if EnableMsgHook then begin
   FHooks := THSControlMessagePumpHookList.Create;
   FHooks.Add(THSControlMessagePumpHook.Create(Self));
   for I:=0 to Pred(ComponentCount) do
     if Components[I] is TControl then
       FHooks.Add(THSControlMessagePumpHook.Create(TControl(Components[I])));
 end;
end;



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.025 c
6-1113230691
LXD
2005-04-11 18:44
2005.07.18
Indy передача данных по сети...


1-1120328652
heady
2005-07-02 22:24
2005.07.18
ShowModal уже открытое окно


3-1118307115
ShotGuN
2005-06-09 12:51
2005.07.18
Копирование массива данных


8-1110808478
Shurik_
2005-03-14 16:54
2005.07.18
TMediaPlayer


1-1120153587
Michael5
2005-06-30 21:46
2005.07.18
Как заполнить StringGrid данными из файла Excel?




   Наверх