Turn off display in Windows on command
Solution 1:
On a laptop you can use the keyboard shortcut combination of Fn+F7 (F7 might differ depending on the laptop model) and for a desktop you can always use the power button.
Do you need any other specifications such as wake up on mouse movement or something else?
You can always create a shortcut and assign a keyboard shortcut to a black screensaver, use this path:
%systemroot%\system32\scrnsave.scr /s
This will not turn off you screen but make it completely black
Solution 2:
A couple more options:
- Turn Off LCD - just place the executable on your desktop
-
NirCmd - you'll need to copy nircmd.exe to your Windows system directory, or add its location to the PATH environment variable. Then just run
nircmd monitor off
from the command line. More information at the link.
Solution 3:
You can use WinAPI call SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2)
where HWND_BROADCAST = 0xFFFF
,
WM_SYSCOMMAND = 0x0112
and SC_MONITORPOWER = 0xF170
. The 2
means the display is being shut off.
There are several ways to make the call:
Separate executable. You can fire it through a script, command line, Run window, shortcut (
*.lnk
), etc. Note that shortcuts can be invoked using a keyboard shortcut. The executable may be written in C or C++, or via P/Invoke in .NET languages (C# or PowerShell), or in many other languages that have a foreign language interface (e.g. JNI in Java).-
AutoHotkey script. For a non-programmer, this way is probably simpler. Making customizations still requires some scripting. This script turns monitor off on Win + M:
#m:: Sleep 1000 SendMessage, 0x112, 0xF170, 2,, Program Manager return
Note the timeout before the SendMessage
call in the AutoHotkey script. It gives the user a chance to release keys (in case their release would wake up the monitor again). Do not forget about it even when making the call from a script in another language.
For more info, see the documentation of SendMessage
function, WM_SYSCOMMAND
message and AutoHotkey SendMessage
. It might be of interest that since Windows 8, using the same method to turn monitor on does not work, but there is a work-around.
Solution 4:
Powershell one-liner would be:
(Add-Type -MemberDefinition "[DllImport(""user32.dll"")]`npublic static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);" -Name "Win32SendMessage" -Namespace Win32Functions -PassThru)::SendMessage(0xffff, 0x0112, 0xF170, 2)