使用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

相關文章
相關標籤/搜索