OBSで画面ロックにならないことに対して対応。

ようはOBSが何かしていると画面ロックが無効になっていた。

つまりこんな状態だとスクリーンセイバーも画面ロックも動作しないようだ。

OSBの設定を見てもいまいちなにもできなかった。

仕方ないからpythonで対応。



C:\Windows\System32>powercfg -requests
DISPLAY:
[PROCESS] \Device\HarddiskVolume3\Program Files\obs-studio\bin\64bit\obs64.exe

SYSTEM:
[DRIVER] Senary Audio (HDAUDIO\FUNC_01&VEN_14F1&DEV_1F86&SUBSYS_17AA50D6&REV_1001\5&3a27c9f3&0&0001)
現在 1 つのオーディオ ストリームが使用中です。
[DRIVER] AMD Audio Device (ACP\VEN_1022&DEV_15E2&SUBSYS_17AA50D6\5&2bbff31f&0&04)
現在 1 つのオーディオ ストリームが使用中です。
[PROCESS] \Device\HarddiskVolume3\Program Files\obs-studio\bin\64bit\obs64.exe

AWAYMODE:
[PROCESS] \Device\HarddiskVolume3\Program Files\obs-studio\bin\64bit\obs64.exe

実行:
[PROCESS] \Device\HarddiskVolume3\Users\currentuser\AppData\Local\Programs\Opera\opera.exe
Playing audio

PERFBOOST:
なし。

ACTIVELOCKSCREEN:
なし。


C:\Windows\System32>


実行はcmdから。
start “” “pythonw” “scriptpath.py”

フロントには出てこないように python コマンドではない。

スクリプトは以下。



from pynput.mouse import Listener as MouseListener
import threading
import os
import time
from pystray import MenuItem as item
import pystray
from PIL import Image

def on_activate(icon, item):
    print(f"Activated: {item.text}")

def on_quit(icon, item):
    icon.stop()

# スクリプトのあるディレクトリを取得
current_dir = os.path.dirname(os.path.realpath(__file__))
icon_path = os.path.join(current_dir, 'check.ico')
icon_image = Image.open(icon_path)  # アイコン画像をロード

# アイコンをスタートする関数
def run_icon():
    icon.run()

# アイコンオブジェクトの作成
icon = pystray.Icon(
    name="Test Icon",
    icon=icon_image,
    title="Python Script Running",
    menu=pystray.Menu(
        item("Activate", on_activate),
        item("Quit", on_quit)
    )
)

# トレイアイコンを別スレッドで実行
icon_thread = threading.Thread(target=run_icon)
icon_thread.start()

# ロックするまでのアイドル時間(秒)
IDLE_TIME = 60  # 例: 60秒

# 最後にマウスが動いた時間を記録
last_move_time = time.time()

def on_move(x, y):
    global last_move_time
    last_move_time = time.time()

def check_idle():
    while True:
        time.sleep(10)  # 10秒ごとにチェック
        if time.time() - last_move_time > IDLE_TIME:
            print("System is idle. Locking the workstation.")
            os.system('rundll32.exe user32.dll,LockWorkStation')  # Windowsをロック

# マウスの監視を開始
mouse_listener = MouseListener(on_move=on_move)
mouse_listener.start()

# アイドル状態のチェックを別スレッドで実行
idle_thread = threading.Thread(target=check_idle)
idle_thread.start()

# スクリプトが終了しないようにメインスレッドを維持
mouse_listener.join()

 

要はアイコンで動作していることを通知している。

 

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です