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);
 }
Example #3
0
 private void OnApplicationPause(bool pauseStatus)
 {
     OnForeground?.Invoke(this, !pauseStatus);
 }