Is there a way to turn off the display in Windows (7), preferably without using additional software?
Powershell script works fine, but leaves command-line window after turning on the display.
Is there a way to turn off the display in Windows (7), preferably without using additional software?
Powershell script works fine, but leaves command-line window after turning on the display.
A couple more options:
nircmd monitor off from the command line. More information at the link.nircmd. Imho tools set from Nir Sofer and Russinovich should be installed on any advanced user's PC.
– Smit Johnth
Apr 20 '15 at 20:11
nircmd monitor async_off or it wouldn't exit after turning the monitor off.
– James Moberg
Sep 24 '22 at 17:01
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
/s stands for "Run the Screen Saver now", while launching w/o any switch means "Show the Settings dialog box"
– Marcin Orlowski
Oct 30 '16 at 19:37
scrnsave.scr is entered in the search box or in run dialog, but it requires /s when executed from cmd.exe (without it, a dialog pops up informing that this screensaver has no configurable options).
– Palec
Jun 08 '17 at 01:22
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.
Sleep 50 after SendMessage instead of this long sleep before. This has the effect of turning off the screen immediately. Tested on my own laptop and found it to be better.
– cyqsimon
Aug 17 '20 at 18:25
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)
powershell (Add-Type '[DllImport(\"user32.dll\")]^public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas)::SendMessage(-1,0x0112,0xF170,2)
– Kidquick
Dec 15 '20 at 03:04
.ps1-file. Running unsigned PowerShell-scripts isn't enabled by default, so your solution will work for all.
– Jari Turkia
Dec 15 '20 at 10:05
nircmd monitor on, monitor will turn on for a second and then the computer will hibernate.
– JPX
Jan 13 '21 at 19:33
(Add-Type "[DllImport(""user32.dll"")]`npublic static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);" -Name a -Pas)::SendMessage(-1,0x0112,0xF170,2)
– CeePlusPlus
Feb 11 '21 at 02:47
MemberDefinition and -Namespace Win32Functions -PassThru. I'm looking to turn off 1 monitor of 3 if you have any suggestion by the way https://superuser.com/questions/1625092/script-to-disable-3rd-monitor-in-windows-10
– CeePlusPlus
Feb 11 '21 at 18:31
nircmd display off) both not only turns off a display but also makes Windows 10 suspend (no disk/network/audio activity) with a ThinkPad laptop. Probably this is related to battery power plan or Lenvo Vintage bloatware. I reduced display backlight to save power...
– gavenkoa
Nov 30 '22 at 10:18
As one-liner for instance using Win+R:
powershell -command $obj = Add-Type -MemberDefinition '[DllImport(""""user32.dll"""")] public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name fn -Namespace ns -PassThru; $obj::SendMessage(0xffff, 0x0112, 0xF170, 2)
It's not possible to put in a shortcut .lnk file unfortunately because the line is too long, I run it with Flow Launcher and my Favorites Plugin, this supports long command lines.
powershell (Add-Type '[DllImport(\"user32.dll\")]public static extern int PostMessage(int h,int m,int w,int l);' -Name a -Pas)::PostMessage(-1,0x0112,0xF170,2) check this
– S.Serpooshan
Feb 22 '23 at 20:21
Based on Ujjwal Singh's answer, here is a Python script to do so.
First install pywin32 module, if you haven't already.
$ python -m pip install pywin32
Here is the script:
from win32api import SendMessage
SendMessage(
# https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendmessage?redirectedfrom=MSDN#parameters
0xFFFF, # HWND_BROADCAST
# https://docs.microsoft.com/en-us/windows/win32/menurc/wm-syscommand
0x0112, # WM_SYSCOMMAND
0xF170, # SC_MONITORPOWER
2, # the display is being shut off
)
Or if you prefer a one-liner to run directly from command prompt:
$ python -c "import win32api; win32api.SendMessage(0xFFFF, 0x0112, 0xF170, 2)"