시스템 전역적으로 Hooking을 하려면 DLL로 만들어 호출을 해야 합니다.
DLL로 되어 있지 않으면 현재 어플 내에서만 동작 하게 됩니다. 참고하세여~
---------------------------------------------
김성기 님이 쓰신 글 :
: 안녕하세요... 델파이 초보입니다.
: 저는여 Hooking을 예제를 통해서 해봤는데요...
: 이것은 THookForm 안에서의 훅킹만 되더라구요..ㅠㅠ
:
: 알고싶은것은 Windows상에 돌아다니는 모든 메시지를 알고싶습니다.
: 델파이 고수님들 혹시 알면 갈쳐주십시요...많은답변 부탁드릴께요...^^
:
:
: unit HookMain;
:
: interface
:
: uses
: Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
: Dialogs, StdCtrls;
:
: type
: THookForm = class(TForm)
: GroupBox1: TGroupBox;
: LogList: TListBox;
: SendBtn: TButton;
: DoLog: TCheckBox;
: ExitBtn: TButton;
: procedure FormCreate(Sender: TObject);
: procedure FormDestroy(Sender: TObject);
: procedure SendBtnClick(Sender: TObject);
: procedure ExitBtnClick(Sender: TObject);
: private
: { Private declarations }
: function AppWindowsHook(var Message: TMessage): Boolean;
: public
: { Public declarations }
: end;
:
: var
: HookForm: THookForm;
:
: implementation
:
: {$R *.dfm}
:
: procedure THookForm.FormCreate(Sender: TObject);
: begin
: Application.HookMainWindow(AppWindowsHook);
: //Application.HookSynchronizeWakeup
: end;
:
: procedure THookForm.FormDestroy(Sender: TObject);
: begin
: Application.UnhookMainWindow(AppWindowsHook);
: //Application.UnhookSynchronizeWakeup;
: end;
:
: function THookForm.AppWindowsHook(var Message: TMessage): Boolean;
: const
: LogStr = 'Message ID $%x, WParam: $%x, LParam: $%x';
: begin
: Result := True;
: if DoLog.Checked then
: with Message do // 메시지...
: LogList.Items.Add(Format(LogStr, [Msg, WParam, LParam]));
: end;
:
: procedure THookForm.SendBtnClick(Sender: TObject);
: begin
: SendMessage(Application.Handle,WM_NULL, 0, 0);
: end;
:
: procedure THookForm.ExitBtnClick(Sender: TObject);
: begin
: Close;
: end;
:
: end.
|