芋の独り言

当ブログへのアクセスは当ブログのプライバシーポリシーに同意したものとみなします.

スリープ抑止スクリプト?

hateda.hatenadiary.jp 以上のサイトを参考に,というかほぼそのままかな...ってな感じで書いたスクリプトです.他にも参考にしたとこあったかも...
GUIWxPythonを使ってます. wxPython | Python-izmとかを参考に,随時調べながら書きました. 本当はポップアップを自動クリックするようにもしたかったのですが,それは分かりませんでした...誰か教えてくだされば,お願いします...

import ctypes,wx

def switch_in(event):
    button2.Enable()
    button1.Disable()
    # スタンバイモードへの移行抑制
    ctypes.windll.kernel32.SetThreadExecutionState(ES_SYSTEM_REQUIRED | ES_CONTINUOUS)
    frame.SetStatusText('フック実行中...')

def switch_out(event):
    # スタンバイへの移行抑止を解除する
    ctypes.windll.kernel32.SetThreadExecutionState( ES_CONTINUOUS)
    button1.Enable()
    button2.Disable()
    frame.SetStatusText('フック解除...')

ES_CONTINUOUS        = 0x80000000
ES_AWAYMODE_REQUIRED = 0x00000040
ES_SYSTEM_REQUIRED   = 0x00000001
ES_DISPLAY_REQUIRED  = 0x00000002
# アプリケーションのオプジェクトを生成
app=wx.App()
# 重要なコンテナウィジェット,ウィジェットの階層で頂点
# 第一引数:親ウィンドウ(Noneで持たないことを示す),第二引数:識別子(基本-1)
# 第三引数:タイトルとして表示する文字列
# posには表示位置,sizeにはサイズを指定できる←(300,300)というように指定
frame=wx.Frame(None, id=wx.ID_ANY, title='',size=(200,175))
# ステータスバーを使用する
frame.CreateStatusBar()
frame.SetStatusText('ボタンをクリックして実行する')

# ボタンなどを配置する(直接Frameに張り付けられるが)のに使用
panel1=wx.Panel(frame,wx.ID_ANY,pos=(0,0),size=(200,50))
panel2=wx.Panel(frame,wx.ID_ANY,pos=(0,50),size=(200,25))
panel3=wx.Panel(frame,wx.ID_ANY,pos=(0,75),size=(200,25))
panel4=wx.Panel(frame,wx.ID_ANY,pos=(0,100),size=(200,25))

# 文字列の表示→説明文を表示する
text="""
スリープを抑止
"""
experiment=wx.StaticText(panel1,wx.ID_ANY,text,style=wx.TE_CENTER,size=(200,50)) # CENTERで中央寄せ

# tkinterでいうButtonウィジェットの作成
button1=wx.Button(panel2,id=wx.ID_ANY,label='実行',size=(200,25))
# wx.EVT_BUTTON(ボタンがクリックされた)ときに実行する関数を第二引数に指定
# https://code-examples.net/ja/q/2a677 より,引数をlambdaで指定して,別の引数を関数に渡すやり方
# 例:lambda event:switch_in(True)
button1.Bind(wx.EVT_BUTTON,switch_in)
# ツールチップ設定
button1.SetToolTip('クリックして抑止')
# tkinterでいうButtonウィジェットの作成
button2=wx.Button(panel3,id=wx.ID_ANY,label='解除',size=(200,25))
# wx.EVT_BUTTON(ボタンがクリックされた)ときに実行する関数を第二引数に指定
button2.Bind(wx.EVT_BUTTON,switch_out)
# ツールチップ設定
button2.SetToolTip('クリックして解除')
button2.Disable()


# Show() メソッドを呼び出してスクリーンに表示←tkinterのpack()やgrid()
frame.Show()
# イベント待ち状態へ遷移←tkinterのmainloop()
app.MainLoop()