Mrrrr
AdMiN
Inregistrat: acum 17 ani
Postari: 2237
|
|
It's happened quite a few times on a work laptop running Windows 10 with a 2nd screen / monitor, and it's happened to me once at home 2 weeks ago.
I did various stuff and in the past 2 weeks it hasn't happened anymore. I think this might be the one that nailed it:
Open regedit, and navigate to the following key: HKEY_CURRENT_USER\SOFTWARE\Microsoft\Avalon.Graphics
Add a new DWORD value named: DisableHWAcceleration
Set its value to 1.
Restart your PC.
* * * *
In case you don't want to disable HW Acceleration, changing resolution seems to work. Just change it to something else on the big screen / monitor, then back to your default. The problem should be fixed.
To do it a bit faster you could either use an AHK script to change resolution, or a PS script to do that.
1. AHK Script (need AutoHotkey installed or use it to compile an exe file)
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. ; #Warn ; Enable warnings to assist with detecting common errors. SendMode Input ; Recommended for new scripts due to its superior speed and reliability. SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. #SingleInstance, force
detecthiddenwindows, on ; Use command prompt to open display settings Run, %comspec% \k,,hide, cmd_pid WinWait, ahk_pid %cmd_pid% ControlSend, , control desk.cpl'n, ahk_pid %cmd_pid%
; Wait for display settings to open WinWaitActive, Settings sleep, 2000 ; Send the appropriate key strokes to the settings menu to change the resolution
Send,{Tab 4} sleep 100 Send,{Enter}
sleep 100 ; Change this as needed to move to the desired display settings Send,{Down 4}
sleep 100 Send,{Enter} return
|
2. PS Script (need to right click it and select Run with PowerShell)
Function Set-ScreenResolution { <# .Synopsis Sets the Screen Resolution of the primary monitor .Description Uses Pinvoke and ChangeDisplaySettings Win32API to make the change .Example Set-ScreenResolution -Width 1024 -Height 768 -Freq 60 #> param ( [Parameter(Mandatory=$true, Position = 0)] [int] $Width, [Parameter(Mandatory=$true, Position = 1)] [int] $Height,
[Parameter(Mandatory=$true, Position = 2)] [int] $Freq ) $pinvokeCode = @" using System; using System.Runtime.InteropServices; namespace Resolution { [StructLayout(LayoutKind.Sequential)] public struct DEVMODE1 { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string dmDeviceName; public short dmSpecVersion; public short dmDriverVersion; public short dmSize; public short dmDriverExtra; public int dmFields; public short dmOrientation; public short dmPaperSize; public short dmPaperLength; public short dmPaperWidth; public short dmScale; public short dmCopies; public short dmDefaultSource; public short dmPrintQuality; public short dmColor; public short dmDuplex; public short dmYResolution; public short dmTTOption; public short dmCollate; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string dmFormName; public short dmLogPixels; public short dmBitsPerPel; public int dmPelsWidth; public int dmPelsHeight; public int dmDisplayFlags; public int dmDisplayFrequency; public int dmICMMethod; public int dmICMIntent; public int dmMediaType; public int dmDitherType; public int dmReserved1; public int dmReserved2; public int dmPanningWidth; public int dmPanningHeight; }; class User_32 { [DllImport("user32.dll")] public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE1 devMode); [DllImport("user32.dll")] public static extern int ChangeDisplaySettings(ref DEVMODE1 devMode, int flags); public const int ENUM_CURRENT_SETTINGS = -1; public const int CDS_UPDATEREGISTRY = 0x01; public const int CDS_TEST = 0x02; public const int DISP_CHANGE_SUCCESSFUL = 0; public const int DISP_CHANGE_RESTART = 1; public const int DISP_CHANGE_FAILED = -1; } public class PrmaryScreenResolution { static public string ChangeResolution(int width, int height, int freq) { DEVMODE1 dm = GetDevMode1(); if (0 != User_32.EnumDisplaySettings(null, User_32.ENUM_CURRENT_SETTINGS, ref dm)) { dm.dmPelsWidth = width; dm.dmPelsHeight = height; dm.dmDisplayFrequency = freq; int iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_TEST); if (iRet == User_32.DISP_CHANGE_FAILED) { return "Unable to process your request. Sorry for this inconvenience."; } else { iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_UPDATEREGISTRY); switch (iRet) { case User_32.DISP_CHANGE_SUCCESSFUL: { return "Success"; } case User_32.DISP_CHANGE_RESTART: { return "You need to reboot for the change to happen.\n If you feel any problems after rebooting your machine\nThen try to change resolution in Safe Mode."; } default: { return "Failed to change the resolution"; } } } } else { return "Failed to change the resolution."; } } private static DEVMODE1 GetDevMode1() { DEVMODE1 dm = new DEVMODE1(); dm.dmDeviceName = new String(new char[32]); dm.dmFormName = new String(new char[32]); dm.dmSize = (short)Marshal.SizeOf(dm); return dm; } } } "@ Add-Type $pinvokeCode -ErrorAction SilentlyContinue [Resolution.PrmaryScreenResolution]::ChangeResolution($width,$height,$freq) }
Set-ScreenResolution -Width 1600 -Height 900 -Freq 60
Set-ScreenResolution -Width 1920 -Height 1080 -Freq 60 |
_______________________________________
|
|