Skip to content

Instantly share code, notes, and snippets.

@oledid
Created September 24, 2015 07:15
Show Gist options
  • Save oledid/fb02951b6b1848d1418d to your computer and use it in GitHub Desktop.
Save oledid/fb02951b6b1848d1418d to your computer and use it in GitHub Desktop.
PowerShell: Turn off computer screen
# Source: http://www.powershellmagazine.com/2013/07/18/pstip-how-to-switch-off-display-with-powershell/
# Turn display off by calling WindowsAPI.
# SendMessage(HWND_BROADCAST,WM_SYSCOMMAND, SC_MONITORPOWER, POWER_OFF)
# HWND_BROADCAST 0xffff
# WM_SYSCOMMAND 0x0112
# SC_MONITORPOWER 0xf170
# POWER_OFF 0x0002
Add-Type -TypeDefinition '
using System;
using System.Runtime.InteropServices;
namespace Utilities {
public static class Display
{
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(
IntPtr hWnd,
UInt32 Msg,
IntPtr wParam,
IntPtr lParam
);
public static void PowerOff ()
{
SendMessage(
(IntPtr)0xffff, // HWND_BROADCAST
0x0112, // WM_SYSCOMMAND
(IntPtr)0xf170, // SC_MONITORPOWER
(IntPtr)0x0002 // POWER_OFF
);
}
}
}
'
[Utilities.Display]::PowerOff()
@oledid
Copy link
Author

oledid commented Jul 13, 2020

@TrueMilli great that you found a workaround.

@PCHSwS
Copy link

PCHSwS commented Apr 18, 2021

@TrueMilli found an even better solution. Replace SendMessage with PostMessage, PostMessage work asynchronous and does not cause the script to hang!

@oledid you might want to replace that in your snippet if you find that appropriate.

@oledid
Copy link
Author

oledid commented May 18, 2021

@PCHSwS I don't maintain the script unless I need to use it again, but people can see your comments here - and here's even a link to your fork: https://gist.github.com/PCHSwS/39e213aac7c574b89673da8dc575e7fa

@Nigtellios
Copy link

Is there a possibility to pick which from X monitors we can disable?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment