Windows10のかゆいところに手が届く。モニター画面だけオフにする方法

2019年5月12日

こんにちわスピカです。

Androidなどは画面だけオフにするアプリがあったりして結構便利に利用させてもらっていますが、ことWindowsの場合PC自体スリープにするのは比較的簡単にできるのですが画面のみオフというのはあまり見ない。

一定時間後のモニター電源オフはOSの機能だけでできる

これはスクリーンセーバーの設定と同じで、「Windowsの設定」で可能です。

手順としては、

①「Windowsの設定」から「システム」を呼び出す

②右ペインの「電源とスリープ」をクリック

③左ペインの「画面」欄の下に「次の時間が経過後、ディスプレイの電源を切る」のプルダウンメニューで時間を設定する。

 

 

でもユーザーが消したい時の方法って

Windows自体のショートカット機能でもワンクリで消せる方法は簡単にはないようです。

そうなるとやはり頼みの綱はフリーソフト・・で探すと

画面のみオフにするソフト

画面オフ

Link

起動させると上記画面が表示され「省エネ」ボタンをクリックすると画面が消灯します。最低でも2クリック必要、しかも再度画面が表示されたときにソフトがまだ常駐したまま。このあたりがちょっと残念かな・・

ディスプレイ@OFF

Link

これはディスクトップ上にでもショートカットを作っておいて、それをダブルクリックすれば、上記のダイアログが表示されて5秒後に画面が消灯します。時間の設定はできないようです。

ScreenOff

Link

これもディスクトップ上にでもショートカットを作っておいて実行するといきなり画面が消えます。ワンクリック消しにもってこいかも。

 

スクリプトでも可能

スリープ等などのようにショートカットを作成してワンクリでというのはないようですが、Powershellを使ったスクリプティングなら作っている方が何人か見つかりました。

 

ファイル名 MonitorPowerOff.ps1

[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$form=new-object System.Windows.Forms.Form
$message=[System.Windows.Forms.Message]::Create($form.Handle,274,61808,2)
$nativeWindow=new-object System.Windows.Forms.NativeWindow
$nativeWindow.DefWndProc([ref]$message)

MonitorPowerOn.ps1

[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$form=new-object System.Windows.Forms.Form
$message=[System.Windows.Forms.Message]::Create($form.Handle,274,61808,-1)
$nativeWindow=new-object System.Windows.Forms.NativeWindow
$nativeWindow.DefWndProc([ref]$message)

引用元:Windows Script Programming

 

使いかたは、適当な場所(ディスクトップ等)に新規テキストファイルを作成、メモ帳等で開く。

そのテキストファイルに、「ファイル名 MonitorPowerOff.ps1」を除いた以下文をコピペして保存。

ファイル名を「MonitorPowerOff.ps1」(MonitorPowerOffの部分は何でもよい)とファイル名を変更します。

その時に必ず拡張子を表示しておくことです。そうでないと「MonitorPowerOff.ps1.txt」となってしまい。スクリプトファイルとして機能しません。

もし拡張子の表示の仕方がわからない場合はここを参照してちょ

 

もうひとつ紹介

ファイル名 monitoroff.ps1

# Turn off the display.
# Then, the display will be turned on if a key is pressed.

$HWND_BROADCAST = -1
$WM_SYSCOMMAND = 0x0112
$SC_MONITORPOWER = 0xF170
$LPARAM_ON = -1
$LPARAM_LOW_POWER = 1
$LPARAM_OFF = 2

$signature = @'
[DllImport("user32.dll")] public static extern bool PostMessage(
IntPtr hWnd,
UInt32 Msg,
Int32 wParam,
Int32 lParam);
'@

$postMessage = Add-Type -memberDefinition $signature `
-Name "Win32PostMessage" `
-namespace "Win32Functions" `
-passThru

$postMessage::PostMessage( $HWND_BROADCAST, $WM_SYSCOMMAND, $SC_MONITORPOWER, $LPARAM_OFF) | Out-Null

[Console]::Readkey() | Out-Null

$postMessage::PostMessage( $HWND_BROADCAST, $WM_SYSCOMMAND, $SC_MONITORPOWER, $LPARAM_ON) | Out-Null

$null

引用元:Hiroshi Okada's blog

こちらは、再度画面表示すると、Powershellのダイアログが残ったままですね。

 

総 評

私の使用感からするとやはりワンクリで実行できるタイプが非常に便利に感じました。

ただ、ソフト(アプリ)化されたものは、ソースコードが不明な分、ちょっと不安感もありますが、このクラスのソフトなら何も問題もないと思います。

品揃え豊富で安い!NTT-X Store