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); } } }
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); } }