么使用命令关闭它机器上的显示器。我没搞懂它的意图,但是我猜这家伙可能想看恐怖电影,屏幕的闪烁影响他的体验,或者极有可能他想让自己的笔记本尽可能地省电。无论怎样我在网上搜索之后,整理出了下面的脚本:
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中,同样请确保整个类型的定义也包含其中。
荔非苔注:这里所说的关闭显示器是关闭机器向显示器发送信号,有的显示器在未收到信号超时后会自动关闭。如果信号关闭后可以按键盘任意键唤醒。唤醒有个过程,不要着急,又不是抢火车票,按一次就够了。
|