Advertisement
Borrisholt

SetWinEventHook

Sep 18th, 2019
551
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.03 KB | None | 0 0
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Memo1: TMemo;
  12.     procedure FormCreate(Sender: TObject);
  13.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  14.   private
  15.     { Private declarations }
  16.     FEvent1: Cardinal;
  17.     FEvent2: Cardinal;
  18.     procedure WinEventProc(HWINEVENTHOOK: THandle; Event: DWORD; hWnd: hWnd; idObject, idChild: Longint; idEventThread, dwmsEventTime: DWORD); stdcall;
  19.   public
  20.     { Public declarations }
  21.   end;
  22.  
  23. var
  24.   Form1: TForm1;
  25.  
  26. implementation
  27.  
  28. {$R *.dfm}
  29.  
  30. uses
  31.   DateUtils;
  32.  
  33. procedure WinEventProcCallBack(HWINEVENTHOOK: THandle; Event: DWORD; hWnd: hWnd; idObject, idChild: Longint; idEventThread, dwmsEventTime: DWORD); stdcall;
  34. begin
  35.   Form1.WinEventProc(HWINEVENTHOOK, Event, hWnd, idObject, idChild, idEventThread, dwmsEventTime);
  36. end;
  37.  
  38. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  39. begin
  40.   UnhookWinEvent(FEvent1);
  41.   UnhookWinEvent(FEvent2);
  42. end;
  43.  
  44. procedure TForm1.FormCreate(Sender: TObject);
  45. begin
  46.   FEvent1 := SetWinEventHook(EVENT_OBJECT_CREATE, EVENT_OBJECT_CREATE, 0, @WinEventProcCallBack, 0, 0, WINEVENT_OUTOFCONTEXT);
  47.   FEvent2 := SetWinEventHook(EVENT_OBJECT_DESTROY, EVENT_OBJECT_DESTROY, 0, @WinEventProcCallBack, 0, 0, WINEVENT_OUTOFCONTEXT);
  48. end;
  49.  
  50. procedure TForm1.WinEventProc(HWINEVENTHOOK: THandle; Event: DWORD; hWnd: hWnd; idObject, idChild: Longint; idEventThread, dwmsEventTime: DWORD);
  51. var
  52.   ClassName: string;
  53.   EventTime: TDateTime;
  54. begin
  55.   EventTime := IncMilliSecond(Now, dwmsEventTime - GetTickCount);
  56.  
  57.   SetLength(ClassName, 255);
  58.   SetLength(ClassName, GetClassName(hWnd, pChar(ClassName), 255));
  59.  
  60.   if pChar(ClassName) = 'SysDragImage' then
  61.   begin
  62.     if Event = EVENT_OBJECT_CREATE then
  63.       Memo1.Lines.Add(TimeToStr(EventTime) + ': Drag Start')
  64.     else
  65.       Memo1.Lines.Add(TimeToStr(EventTime) + ': Drag End');
  66.   end;
  67. end;
  68.  
  69. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement