private static void OnWinEventHook(object sender, WinEventHookEventArgs e)
        {
            if (_applicationSettings.Count > 0)
            {
                ApplicationSetting applicationSetting = _applicationSettings.FirstOrDefault(x => string.Equals(x.Name, e.ProcessName, StringComparison.OrdinalIgnoreCase));
                if (applicationSetting != null)
                {
                    int displayHandle = GetApplicationDisplayHandle(e.Handle);
                    //test if changing the vibrance value is needed
                    if (displayHandle != -1 && !equalsDVCLevel(displayHandle, applicationSetting.IngameLevel))
                    {
                        //test if a resolution change is needed
                        Screen screen = Screen.FromHandle(e.Handle);
                        if (applicationSetting.IsResolutionChangeNeeded && IsResolutionChangeNeeded(screen, applicationSetting.ResolutionSettings) &&
                            _windowsResolutionSettings.ContainsKey(screen.DeviceName) &&
                            _windowsResolutionSettings[screen.DeviceName].Item2.Contains(applicationSetting.ResolutionSettings))
                        {
                            PerformResolutionChange(screen, applicationSetting.ResolutionSettings);
                        }
                        _gameScreen = screen;
                        _vibranceInfo.defaultHandle = displayHandle;
                        setDVCLevel(_vibranceInfo.defaultHandle, applicationSetting.IngameLevel);
                    }
                }
                else
                {
                    IntPtr processHandle = e.Handle;

                    if (!isWindowActive(ref processHandle))
                    {
                        return;
                    }

                    //test if a resolution change is needed
                    Screen currentScreen = Screen.FromHandle(processHandle);
                    if (_gameScreen != null &&
                        _gameScreen.Equals(currentScreen) &&
                        _windowsResolutionSettings.ContainsKey(currentScreen.DeviceName) &&
                        IsResolutionChangeNeeded(currentScreen, _windowsResolutionSettings[currentScreen.DeviceName].Item1))
                    {
                        PerformResolutionChange(currentScreen, _windowsResolutionSettings[currentScreen.DeviceName].Item1);
                    }

                    //test if changing the vibrance value is needed
                    if (_vibranceInfo.affectPrimaryMonitorOnly && !equalsDVCLevel(_vibranceInfo.defaultHandle, _vibranceInfo.userVibranceSettingDefault))
                    {
                        if (_gameScreen != null && !_gameScreen.DeviceName.Equals(currentScreen.DeviceName))
                        {
                            return;
                        }

                        setDVCLevel(_vibranceInfo.defaultHandle, _vibranceInfo.userVibranceSettingDefault);
                    }
                    else if (!_vibranceInfo.affectPrimaryMonitorOnly && !_vibranceInfo.displayHandles.TrueForAll(handle => equalsDVCLevel(handle, _vibranceInfo.userVibranceSettingDefault)))
                    {
                        _vibranceInfo.displayHandles.ForEach(handle => setDVCLevel(handle, _vibranceInfo.userVibranceSettingDefault));
                    }
                }
            }
        }
        private void OnWinEventHook(object sender, WinEventHookEventArgs e)
        {
            if (_applicationSettings.Count > 0)
            {
                ApplicationSetting applicationSetting = _applicationSettings.FirstOrDefault(x => string.Equals(x.Name, e.ProcessName, StringComparison.OrdinalIgnoreCase));
                if (applicationSetting != null)
                {
                    //test if a resolution change is needed
                    Screen screen = Screen.FromHandle(e.Handle);
                    if (_vibranceInfo.neverChangeResolution == false &&
                        applicationSetting.IsResolutionChangeNeeded &&
                        IsResolutionChangeNeeded(screen, applicationSetting.ResolutionSettings) &&
                        _windowsResolutionSettings.ContainsKey(screen.DeviceName) &&
                        _windowsResolutionSettings[screen.DeviceName].Item2.Contains(applicationSetting.ResolutionSettings))
                    {
                        _gameScreen = screen;
                        PerformResolutionChange(screen, applicationSetting.ResolutionSettings);
                    }

                    _amdAdapter.SetSaturationOnAllDisplays(_vibranceInfo.userVibranceSettingDefault);
                    if (_vibranceInfo.affectPrimaryMonitorOnly)
                    {
                        _amdAdapter.SetSaturationOnDisplay(applicationSetting.IngameLevel, screen.DeviceName);
                    }
                    else
                    {
                        _amdAdapter.SetSaturationOnAllDisplays(applicationSetting.IngameLevel);
                    }
                }
                else
                {
                    IntPtr processHandle = e.Handle;
                    if (GetForegroundWindow() != processHandle)
                    {
                        return;
                    }

                    //test if a resolution change is needed
                    Screen screen = Screen.FromHandle(processHandle);
                    if (_vibranceInfo.neverChangeResolution == false &&
                        _gameScreen != null && _gameScreen.Equals(screen) &&
                        _windowsResolutionSettings.ContainsKey(screen.DeviceName) &&
                        IsResolutionChangeNeeded(screen, _windowsResolutionSettings[screen.DeviceName].Item1))
                    {
                        PerformResolutionChange(screen, _windowsResolutionSettings[screen.DeviceName].Item1);
                    }

                    _amdAdapter.SetSaturationOnAllDisplays(_vibranceInfo.userVibranceSettingDefault);
                }
            }
        }
Exemple #3
0
 private void WinEventCallbackInner(int hWinEventHook, uint eventType, int hwnd, int idObject, int idChild, int dwEventThread, int dwmsEventTime)
 {
     try
     {
         if (!IsDisposed)
         {
             if (Application.Current == null)
             {
                 Dispose();
                 return;
             }
             var args = new WinEventHookEventArgs
             {
                 Hwnd      = hwnd,
                 EvtType   = (EventTypeEnum)eventType,
                 Timestamp = dwmsEventTime
             };
             EventTypeEnum evtType = args.EvtType;
             if (evtType <= EventTypeEnum.EVENT_OBJECT_FOCUS)
             {
                 if (evtType != EventTypeEnum.EVENT_SYSTEM_MINIMIZESTART)
                 {
                     if (evtType == EventTypeEnum.EVENT_OBJECT_FOCUS)
                     {
                         if (EvFocused != null)
                         {
                             EvFocused(this, args);
                         }
                     }
                 }
                 else
                 {
                     if (EvMinimizeStart != null)
                     {
                         EvMinimizeStart(this, args);
                     }
                 }
             }
             else if (evtType != EventTypeEnum.EVENT_OBJECT_LOCATIONCHANGE)
             {
                 if (evtType == EventTypeEnum.EVENT_OBJECT_VALUECHANGE)
                 {
                     if (EvTextChanged != null)
                     {
                         EvTextChanged(this, args);
                     }
                 }
             }
             else if (hwnd == this._hwnd)
             {
                 if (EvLocationChanged != null)
                 {
                     EvLocationChanged(this, args);
                 }
             }
         }
     }
     catch (Exception e)
     {
         Log.Exception(e);
     }
 }