読者です 読者をやめる 読者になる 読者になる

破棄されたブログ

このブログは破棄されました。

Python で Windows のスリープを抑止するコンテキストマネージャ書いた

Python Windows

FFMpeg でのエンコスクリプトを普通に bat で書いてたんだけど, スリープを抑止するのにいい方法が見つからなかったんで, bat をやめて Python で書くことにした. スリープを抑止するには, WindowsAPI である SetThreadExecutionStateES_SYSTEM_REQUIRED | ES_CONTINUOUS で呼び出してやればいいっぽい.

execstate.py として, 以下のスクリプトを作成した.

import ctypes

class ExecutionStateContext(object):

    ES_CONTINUOUS        = 0x80000000
    ES_AWAYMODE_REQUIRED = 0x00000040
    ES_SYSTEM_REQUIRED   = 0x00000001
    ES_DISPLAY_REQUIRED  = 0x00000002

    def __init__(self, state=None):
        if state is None:
            state = self.ES_SYSTEM_REQUIRED

        self._state = state | self.ES_CONTINUOUS

    def __enter__(self):
        ctypes.windll.kernel32.SetThreadExecutionState(self._state)

    def __exit__(self, *args):
        ctypes.windll.kernel32.SetThreadExecutionState(self.ES_CONTINUOUS)


if __name__ == "__main__":
    import time

    with ExecutionStateContext():
        while True:
            time.sleep(2)

スリープ抑止状態の確認には, 管理者権限で powercfg -requests を使う. START \MIN python execstate.py で, execstate.py をバックグラウンド起動させた. これは, 同一端末内でスリープ抑止状態の確認をするため. 以下のとおり, スリープが抑止できることが確認できた.

f:id:namidamexx:20140824235053p:plain

参考資料

備考

肝心のエンコスクリプトは, まだ書いていない.

広告を非表示にする