夏は暑い。私事だが24インチディスプレイがLEDバックライトではない型なのでディスプレイ周辺が1段暑いように感じる。PC本体もそうだが、発熱源はできるだけ小まめに電源のON/OFFをしたいところ。
電源とスリープ
何分に設定するかはともかくとして、席を外した時にディスプレイをスリープにすることができるので、支障がなければ設定しておこう。
Windows API 直呼び
稀に「10分間コンビニ行くので今すぐにディスプレイをスリープにしたい」と思うことがある。ディスプレイの電源ボタンを押してもいいのだが、マルチディスプレイ環境でデスクトップのアイコンの配置がぶっ飛んだりして…とにかくあまり良い思い出がない1。ディスプレイの電源をすぐにOFFにできるフリーソフトもいくつかあるようだが、私はあまりその手の(目的がちょっとした利便に関わるだけの)フリーソフトのバイナリはあまり信用したくない。ただAPIを呼ぶだけなのでPythonででっちあげたのがコレ。
# -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; coding: utf-8; -*-
from ctypes import *
user32 = WinDLL('User32')
DISPLAY_ON = -1
DISPLAY_OFF = 2
HWND_BROADCAST = 0xffff
WM_SYSCOMMAND = 0x0112
SC_MONITORPOWER = 0xf170
post_message = cast(user32.PostMessageA,
CFUNCTYPE(c_uint32, c_uint32, c_uint32, c_uint32, c_uint32))
lock_workstation = cast(user32.LockWorkStation, CFUNCTYPE(c_uint32))
post_message(HWND_BROADCAST,
WM_SYSCOMMAND,
SC_MONITORPOWER,
DISPLAY_OFF)
# lock_workstation()
gist.
これをバッチファイルか何かで走らせるようにし、そのアイコンをクリックすることでディスプレイをスリープ状態にできる。電源管理のスリープと同じで、マウスを動かしたりキーボードを叩けば復帰する。
lock_workstation()
のコメントアウトを外すと、ディスプレイをスリープにしつつロック状態になる。この状態では画面復帰後にパスワード入力などで認証し直す必要がある。
なお、これをバッチファイルから実行する場合、 timeout /T 3
などとして少し遅延を入れるとよい。
@asmさんによるPowerShell版
Pythonで実装しちゃったが、おそらくPowerShell + C#で、素の状態のWindows10で動くスクリプトも組めると思う。やる気が出たらそっちもやってみたい。あるいは誰かやってよ。
コメント欄に @asm さんによるPowerShell版の実装があるぞ! こちらの実装は素の状態のWindows10でも動く筈。
参考
- ディスプレイの電源 ON/OFF をプログラムから制御する方法 (Windows) | TipsZone
- PostMessage 関数
- LockWorkStation function (Windows)
- パノコンの画面(ディスプレイ)だけシャットダウンすることは可能ですか?? - ... - Yahoo!知恵袋
- ディスプレイの電源を切るフリーソフトまとめ(7種類紹介)
- macでディスプレイを強制スリープする方法 | ri-que lab
- 【裏ワザ】Windows10のデスクトップに「電源オフ」ショートカットを作る方法 | Windows 10 | できるネット
-
電源ボタンでOFFにすると、復帰時も電源ボタンを押す必要がある...あまり大きな声で言いたくないが、復帰時にディスプレイではなくPC本体の電源をポチっとな、してしまったことが何度かあるので、そういう意味でも個人的に抵抗がある。あと物理ボタンは可動部品なので頻繁に押してると壊れやすいということもある。 ↩