🐲
【ドラゴンクエストXオンライン】ゲーム中は SwitchBot の電源プラグで Do Not Disturb ランプを点灯する
基本コンセプト
EnumWindows()
のコールバックで WNDCLASSNAME
に一致するものがあれば起動中とする
DND ランプは SwitchBot の電源プラグにつながっていて、状況でプラグのオンオフをするだけなので 1分に 1回の Cloud API アクセスでも 10000 times / day のリクエスト回数制限には引っかからないが、叩きすぎな気もするので BLE に変更したいところ……
- DQXboot.exe と同時にこれを起動し一定時間 DQXgame.exe (
SQEX.CDev.Engine.Framework.MainWindow
) が起動していなければ終了するようにすれば API 叩きすぎも解消できるはず - OBS Studio などに置き換えることで配信勢もランプオンオフが可能
- 複数プログラムの検出も対応可能なのでいずれかが検出されれば DND!
みたいな改良ができると思います
基本部分ソース
from win32gui import EnumWindows, GetClassName
WNDCLASSNAME = 'SQEX.CDev.Engine.Framework.MainWindow'
deviceID = 'xxxxxxxxxxxx'
class DQX:
def __init__(self):
self.switchbot = SwitchBot()
def detect(self):
self.proc = None
def EnumWindowsProc(hWnd):
if GetClassName(hWnd) == WNDCLASSNAME:
self.proc = hWnd
EnumWindows(lambda hWnd, _: EnumWindowsProc(hWnd), None)
if self.proc is None:
# print('not running, turn off plug')
self.switchbot.set_device_power(deviceID, 'off')
else:
# print('running, turn on plug')
self.switchbot.set_device_power(deviceID, 'on')
叩き台としての repo
Discussion