ようは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()
要はアイコンで動作していることを通知している。