使用PowerShell关闭和锁定屏幕

别来无恙 提交于 2020-02-28 19:16:46

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

1. 相关内容

1.1. PowerShell配置

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

1.2. Windows API

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

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

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

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

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来数据。

创建步骤:1、在目录或桌面上,右键 -> 新建 -> 快捷方式;2、在位置中填入路径及执行参数 "%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe " -Command "turnOffMonitor" (不同系统路径可能不同)。


附:原始Blog地址http://home4j.duapp.com/index.php/2014/01/04/use-powershell-to-turn-off-monitor-and-lock-screen.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!