使用PowerShell关闭和锁定屏幕

ThinkPad T430没有关闭屏幕的功能键,不太方便,正好最近在折腾PowerShell,便写个脚原本实现这个功能。php

1. 相关内容

1.1. PowerShell配置

为了更方便的使用脚本,须要用到3.0版的模块自动装载功能,安装和配置方法见:http://home4j.duapp.com/index.php/2013/12/27/windows-powershell-3.htmlhtml

1.2. Windows API

Windows提供的两个相关API都在User32.dll中,分别是:git

  1. PostMessage函数,用于关闭屏幕,http://msdn.microsoft.com/en-us/library/windows/desktop/ms644944.aspxshell

  2. LockWorkStation函数,用于锁屏,http://msdn.microsoft.com/en-us/library/windows/desktop/aa376875.aspxwindows

PowerShell的强大之处在于可以嵌入编写C#、VB等代码,能够直接调用Windows的API,已经无所不能了,示例:http://gallery.technet.microsoft.com/scriptcenter/Demo-of-calling-C-and-6ef0cd2bapp

2. 脚本代码

# 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 函数

3. 小技巧

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

相关文章
相关标签/搜索