Форум: "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.043 c