ThinkPad T430没有关闭屏幕的功能键,不太方便,正好最近在折腾PowerShell,便写个脚原本实现这个功能。php
为了更方便的使用脚本,须要用到3.0版的模块自动装载功能,安装和配置方法见:http://home4j.duapp.com/index.php/2013/12/27/windows-powershell-3.html。html
Windows提供的两个相关API都在User32.dll中,分别是:git
PostMessage函数,用于关闭屏幕,http://msdn.microsoft.com/en-us/library/windows/desktop/ms644944.aspx;shell
LockWorkStation函数,用于锁屏,http://msdn.microsoft.com/en-us/library/windows/desktop/aa376875.aspx。windows
PowerShell的强大之处在于可以嵌入编写C#、VB等代码,能够直接调用Windows的API,已经无所不能了,示例:http://gallery.technet.microsoft.com/scriptcenter/Demo-of-calling-C-and-6ef0cd2b。app
# sys.psm1,PowerShell模块代码 # 当即关闭屏幕 function turnOffMonitor { # 检查新定义的类是否已经加载,避免重复 if (-not ("me.joshua.powershell.MonitorUtil" -as [type])) { # C#代码 $Source = @" // 引入Dll及相关的函数 [DllImport("user32.dll")] public static extern int PostMessage(int hWnd, int Msg, int wParam, int lParam); public static void TurnOffMonitor() { // “SendMessage”会有被阻塞没法返回的状况,因此使用“PostMessage” PostMessage(0xffff, 0x0112, 0xF170, 2); } "@ // 加载新定义的类型,指定类名和Namespace Add-Type -MemberDefinition $Source -name "MonitorUtil" -namespace "me.joshua.powershell" } // 调用函数关闭屏幕 [me.joshua.powershell.MonitorUtil]::TurnOffMonitor() } # 锁屏 function lock { # “LockWorkStation”没入参,能够直接使用rundll32.exe调用,“PostMessage”则由于须要转化参数类型而不行 rundll32.exe user32.dll,LockWorkStation # 2秒后关闭屏幕 sleep -Seconds 2 turnOffMonitor } # 把模块中的函数导出,以便直接在PowerShell中使用 Export-ModuleMember -Function turnOffMonitor Export-ModuleMember -Function lock
以上代码是PowerShell的模块代码,在3.0以前的版本须要用命令Import-Module 加载,3.0的自动装载配置可参见本文1.1节。加载后可直接经过命令turnOffMonitor 和lock 关闭或锁定屏幕。 脚本Git地址:http://git.oschina.net/joshuazhan/demo4j/blob/master/script/powershell/modules/sys.psm1 函数
PowerShell支持经过命令来解析执行语句,如:PowerShell.exe -Command "turnOffMonitor" ,这意味着能够经过快捷方式来执行命令,不须要每次都打开PowerShell来数据。spa
建立步骤:一、在目录或桌面上,右键 -> 新建 -> 快捷方式;二、在位置中填入路径及执行参数 "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe " -Command "turnOffMonitor" (不一样系统路径可能不一样)。.net
附:原始Blog地址http://home4j.duapp.com/index.php/2014/01/04/use-powershell-to-turn-off-monitor-and-lock-screen.htmlcode