private WinEventProc WinEventProc(string windowName) { return((IntPtr hWinEventHook, WindowsEventHookType eventType, IntPtr hWnd, int idObject, int idChild, int dwEventThread, uint dwmsEventTime) => { GetWindowThreadProcessId(hWnd, out var targetProcessId); var isTarget = targetProcessId == _targetProcessId; switch (eventType) { case WindowsEventHookType.EVENT_SYSTEM_FOREGROUND: OnForeground?.Invoke(this, isTarget); break; case WindowsEventHookType.EVENT_SYSTEM_MINIMIZESTART: if (!isTarget) { return; } OnMinimized?.Invoke(this, true); return; case WindowsEventHookType.EVENT_SYSTEM_MINIMIZEEND: if (!isTarget) { return; } OnMinimized?.Invoke(this, false); break; case WindowsEventHookType.EVENT_SYSTEM_MOVESIZEEND: case WindowsEventHookType.EVENT_OBJECT_LOCATIONCHANGE: if (!isTarget) { return; } OnMoveOrSizeChanged?.Invoke(this, null); break; case WindowsEventHookType.EVENT_OBJECT_REORDER: if (!isTarget) { return; } if (idObject != 0 /* WindowObjId*/) { return; } OnBorderChanged?.Invoke(this, null); break; default: if (isTarget) { OnMessageSent?.Invoke(this, null); } return; } }); }
protected override void OnResume() { OnForeground?.Invoke(this, EventArgs.Empty); }
private void OnApplicationPause(bool pauseStatus) { OnForeground?.Invoke(this, !pauseStatus); }