Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.036 c
1-1120031083
Kolan
2005-06-29 11:44
2005.07.18
Отладка не работает в dll.


1-1120045761
12345
2005-06-29 15:49
2005.07.18
вставка и запуск собственных кусков кода из проги


3-1118144276
Juice
2005-06-07 15:37
2005.07.18
Обработка ошибок - код


8-1111349902
qwertyuiop
2005-03-20 23:18
2005.07.18
DirectDraw.pas чего-то не компилируется в Delhi7


14-1119458885
Антон Г.
2005-06-22 20:48
2005.07.18
DOC -->JPG





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский