[Batch] 控制螢幕開關

邊做邊學,順便留個筆記,若有錯誤請不吝指教。

研究了很久,找到兩個比較簡單的方法:

方法一:call螢幕保護程式

"C:\Windows\System32\scrnsave.scr" /start

這個方式就是讓windows系統呼叫螢幕保護程式輸出一個黑畫面
實際上螢幕還是會微微的發亮(通常螢幕的背光模組不會關閉)

而喚醒的方式也很簡單,只要模擬使用者移動滑鼠即可:

rundll32 user32.dll,SetCursorPos

或是鍵盤輸入任意鍵(這裡是用Enter鍵):

powershell $myshell = New-Object -com "Wscript.Shell";$myshell.sendkeys("{ENTER}")

方法案:切斷訊號輸出:

透過直接 call power shell 直接切斷訊號輸出:

powershell (Add-Type '[DllImport(\"user32.dll\")]^public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas)::SendMessage(-1,0x0112,0xF170,2)

執行之後螢幕應該會變成無訊號
通常螢幕無訊號一段時間後會自行關閉背光模組(Backlight)
這樣就可以確實達到關閉螢幕的目的了

喚醒的部分有找到對應的做法是:

powershell (Add-Type '[DllImport(\"user32.dll\")]^public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas)::SendMessage(-1,0x0112,0xF170,-1)

但在我的環境實際測試無法使用
故仍延續模擬使用者移動滑鼠或鍵盤輸入的方式喚醒。