Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
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()
@FerrousOI

This comment has been minimized.

Copy link

@FerrousOI FerrousOI commented Jan 30, 2017

Thanks for sharing the source!

@vibbrations

This comment has been minimized.

Copy link

@vibbrations vibbrations commented Oct 30, 2017

Thanks mate

@TrueMilli

This comment has been minimized.

Copy link

@TrueMilli TrueMilli commented Jul 8, 2020

Works like a charm.
The script doesn't seem to terminate tho - how do I close the window automatically after it turned the display(s) off?

@oledid

This comment has been minimized.

Copy link
Owner Author

@oledid oledid commented Jul 9, 2020

@TrueMilli how do you run the script?

@TrueMilli

This comment has been minimized.

Copy link

@TrueMilli TrueMilli commented Jul 12, 2020

@oledid In Powershell or PowerShell ISE, doesn't matter. My workaround is to call it from a wrapper:

$process = Start-Process -FilePath $PSScriptRoot\DisplayOffMethod.ps1 -PassThru
Start-Sleep 3
Stop-Process $process

@oledid

This comment has been minimized.

Copy link
Owner Author

@oledid oledid commented Jul 13, 2020

@TrueMilli great that you found a workaround.

@PCHSwS

This comment has been minimized.

Copy link

@PCHSwS 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.

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