分享

PowerShell 关闭显示器

 xiaozhuang 2017-12-15

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 调用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()。运行上面的脚本(没有输出)先定义类,然后就可以使用下面的脚本关闭显示器了。

1
[Utilities.Display]::PowerOff()

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

1
2
3
4
function Switch-DisplayOff
{
   [Utilities.Display]::PowerOff()
}

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

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


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多