Главная страница
    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.049 c
14-1119638837
NightStranger
2005-06-24 22:47
2005.07.18
Оцените дизайн сайта


3-1118163412
Julia
2005-06-07 20:56
2005.07.18
Печать отчетов


3-1117708737
Harry7
2005-06-02 14:38
2005.07.18
Напоминалка для Дней Рождения


1-1120317333
Brack
2005-07-02 19:15
2005.07.18
Как програмно вывести N обьектов


3-1118048953
вп
2005-06-06 13:09
2005.07.18
Создание запроса или ХП как альтернатива временной таблице





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский