私に与えられたアドバイスに従ってこの質問質問させてください。コンピューターがアイドル状態 (アイドル状態とはスリープ状態ではなく、非アクティブまたは使用されていない状態) になった後、たとえば 30 分間実行したい exe ファイルがあります。「非アクティブ」タイムアウトに達したら、アプリケーションを実行したいです。私の PC は、電源オプションの「次の時間が経過したら画面をスリープ状態にする」オプションのみがあり、コンピューターはスリープ状態にならないように設定されているので、Windows + L キーを使用して強制しない限り、PC はスリープ状態にはならず、画面はロック画面になりません。これらの設定はそのままにしておきたいです。非アクティブ期間を検出し、非アクティブ期間に達したら exe ファイルを実行したいです。これを行う方法をご存知ですか?
編集:
回答に記載されている手順に従いました:
新しいタスクを作成し、トリガーを追加し、イベント: アイドル時に設定してタスクを作成しました。条件タブで、タスクがアイドル状態になるまで 1 分間待機するように指定しました (テストのためだけに 10 分間待機するのではなく)。
しかし、10分以上待ってもタスクはPC1ではトリガーされず、別のPC2でトリガーされます。オンラインで調べたところ、PowerCfg -requests
PCがアイドル状態にならない原因が示され、PC2で実行すると何も返されませんが、PC1で実行すると次のメッセージが表示されます。レガシーカーネル呼び出し元" 運転者。
そこで、 を使用しましたPowercfg -requestsoverride
がpowercfg -requestsoverride Driver "Legacy Kernel Caller" System
、実行すると成功し、リストに表示されますPowercfg -requestsoverride
が、それでも下にpowercfg -requests
表示され、タスクがトリガーされません。アドバイスをお願いします。[DRIVER] Legacy Kernel Caller
SYSTEM:
答え1
答え2
最も簡単な解決策は、古き良きタスク スケジューラを使用することです。
タスク スケジューラを使用すると、特定の日時でタスクを設定できるだけでなく、ログオン時やアイドル時などの特定のイベントでタスクを設定することもできます。
新しいタスクを作成し、トリガーを追加して、イベント: アイドル時に設定し、タスクを作成します。条件タブでは、タスクがアイドル状態になるまでの待機時間を指定できます (これを 30 分に設定)。
さらに、タスク スケジューラから、システムが再びアクティブになったときにタスクを自動的に強制終了することもできます。
答え3
申し訳ありませんが、C# ではありませんが、十分簡単です。これは AutoIt に最適な作業です。出典: http://autoitscript.com
ここに私がまとめたスクリプトがあります。これを .au3 ファイルに入れて、notepad を exe に置き換え、実行にはフルパスを含めます。
#include <Timers.au3>
While 1
Sleep(10)
$idleTimer = _Timer_GetIdleTime()
If $idleTimer > 60000 And Not ProcessExists("notepad.exe") Then
Run("notepad.exe")
ElseIf $idleTimer < 10 Then
ProcessClose("notepad.exe")
EndIf
WEnd
答え4
コマンドプロンプトを使用するschtasks
と、タスクが簡単になります。
schtasks /create /tn "My Task" /tr "EXE Application path" /sc onidle /i Number_Of_Minutes_Inactive