private bool EventWindowIsValid(int idChild, Win32.OBJID idObject, IntPtr hwnd) { return(idChild == Win32.CHILDID_SELF && idObject == Win32.OBJID.OBJID_WINDOW && hwnd != IntPtr.Zero); }
private void WindowHook(IntPtr hWinEventHook, Win32.EVENT_CONSTANTS eventType, IntPtr hwnd, Win32.OBJID idObject, int idChild, uint dwEventThread, uint dwmsEventTime) { if (EventWindowIsValid(idChild, idObject, hwnd)) { switch (eventType) { case Win32.EVENT_CONSTANTS.EVENT_OBJECT_SHOW: RegisterWindow(hwnd); break; case Win32.EVENT_CONSTANTS.EVENT_OBJECT_DESTROY: UnregisterWindow(hwnd); break; case Win32.EVENT_CONSTANTS.EVENT_OBJECT_CLOAKED: UpdateWindow(hwnd, WindowUpdateType.Hide); break; case Win32.EVENT_CONSTANTS.EVENT_OBJECT_UNCLOAKED: UpdateWindow(hwnd, WindowUpdateType.Show); break; case Win32.EVENT_CONSTANTS.EVENT_SYSTEM_MINIMIZESTART: UpdateWindow(hwnd, WindowUpdateType.MinimizeStart); break; case Win32.EVENT_CONSTANTS.EVENT_SYSTEM_MINIMIZEEND: UpdateWindow(hwnd, WindowUpdateType.MinimizeEnd); break; case Win32.EVENT_CONSTANTS.EVENT_SYSTEM_FOREGROUND: UpdateWindow(hwnd, WindowUpdateType.Foreground); break; case Win32.EVENT_CONSTANTS.EVENT_OBJECT_NAMECHANGE: UpdateWindow(hwnd, WindowUpdateType.TitleChange); break; case Win32.EVENT_CONSTANTS.EVENT_SYSTEM_MOVESIZESTART: StartWindowMove(hwnd); break; case Win32.EVENT_CONSTANTS.EVENT_SYSTEM_MOVESIZEEND: EndWindowMove(hwnd); break; case Win32.EVENT_CONSTANTS.EVENT_OBJECT_LOCATIONCHANGE: WindowMove(hwnd); break; } } }