Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: 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 вся ветка

Текущий архив: 2005.07.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.039 c
14-1119949293
Ega23
2005-06-28 13:01
2005.07.18
Помогите с терминологией!


4-1116836805
cautur
2005-05-23 12:26
2005.07.18
Имя компьютера


4-1116498180
iskatel
2005-05-19 14:23
2005.07.18
служба доступа к файлаи принтерам


14-1119819794
Petr V. Abramov
2005-06-27 01:03
2005.07.18
shall и will


3-1118187806
Dorian
2005-06-08 03:43
2005.07.18
Как программно перебирать значения в DBGrid?