PowerShell 关闭显示器 2


注意: 此技巧需要PowerShell 2.0或者更高版本支持。

这周我在PowerShell论坛中遇到一个纠结的问题,一个用户询问怎么使用命令关闭它机器上的显示器。我没搞懂它的意图,但是我猜这家伙可能想看恐怖电影,屏幕的闪烁影响他的体验,或者极有可能他想让自己的笔记本尽可能地省电。无论怎样我在网上搜索之后,整理出了下面的脚本:

# 调用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
         );
      }
   }
}
'

脚本使用Add-Type命令定义一个静态的类Utilities.Display。类中定义了可以用来调用关闭显示器的公有方法PowerOff()。运行上面的脚本(没有输出)先定义类,然后就可以使用下面的脚本关闭显示器了。

[Utilities.Display]::PowerOff()

如果把它包装成一个PowerShell函数Switch-DisplayOff,这样可以方便调用和查找命令:

function Switch-DisplayOff
{
   [Utilities.Display]::PowerOff()
}

现在就可以在你的PowerShell会话中使用了,如果决定把它放置在你的$profile中,同样请确保整个类型的定义也包含其中。

荔非苔注:这里所说的关闭显示器是关闭机器向显示器发送信号,有的显示器在未收到信号超时后会自动关闭。如果信号关闭后可以按键盘任意键唤醒。唤醒有个过程,不要着急,又不是抢火车票,按一次就够了。

原文作者:Jakub Jareš
原文链接How to switch off display with PowerShell
翻译
:荔非苔

本文链接: https://www.pstips.net/how-to-switch-off-display-with-powershell.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

2 条评论 “PowerShell 关闭显示器