Windows 7 で画面をロックしたときにプログラムを自動的に終了するにはどうすればよいですか?

Windows 7 で画面をロックしたときにプログラムを自動的に終了するにはどうすればよいですか?

Windows 7 で画面をロックするたびにプログラムを自動的に終了する方法はありますか?

答え1

grawityの提案によると、私が置いたバッチファイルは使用しないでくださいこの回答の最後にあります。これはrundll32.exe ではないWin32 API関数の呼び出し規約に一致しますLockWorkStationこのMSDNブログエントリ詳細については、こちらをご覧ください。そうは言っても、それほど手間がかからない、より良い代替手段があります。

あなたはAutoIt スクリプト言語そしてそのDllCall関数を使用すると、コールスタックを破壊せずにWin32 API関数を呼び出すことができます。ProcessCloseの代わりにTASKKILL。参考までに、ここはLockWorkStationMSDN からの参照。

次の 2 行をファイルに配置し、exitandlock.au3(または同様の名前) として保存します。その後、AutoIt で実行できます (必要に応じて .exe にコンパイルすることもできます)。

ProcessClose("yourapp.exe")
DllCall("user32.dll", "BOOL", "LockWorkStation")

これにより、コール スタックを破損することなく、必要な機能を実現できます。次に、そのファイルをホットキーにバインドし、それを使用してワークステーションをロックできます。または、それを .exe ファイルにコンパイルし、コンピューターが非アクティブになった後にスケジュールされたタスクとして実行するように設定することもできます。

最後に、WinCloseの代替として機能しますProcessClose


言った通り、この方法は使用しないでくださいこれはインターネット上で最も広く使用されている方法の 1 つなので、ここでは完全性のためだけに残しておきます。次のTASKKILLコマンドを使用して、簡単なバッチファイルでこれを行うことができます。

@ECHO OFF
TASKKILL /IM yourapp.exe
Rundll32.exe User32.dll,LockWorkStation

次に、ワークステーションをロックしたいときにバッチファイルを実行します。または、バッチファイルを実行するホットキーを割り当てて、ロックしたいときにそのキーの組み合わせを押すこともできます。コマンドの詳細についてはTASKKILLマイクロソフトの記事

答え2

ステップ1: プログラムを終了するスクリプトを書く

terminate.vbs次の内容で名前が付けられたファイルを作成します。

set objwmiservice = getobject("winmgmts:\\.\root\cimv2")
strprocessname = wscript.arguments.item(0)
strquery = "select * from win32_process where name='" & strprocessname & "'"
set colitems = objwmiservice.execquery(strquery,,48)
for each objitem in colitems
    objitem.terminate
next

コマンド プロンプトを開いて を実行し、このスクリプトをテストしますcscript.exe "C:\path\to\terminate.vbs" notepad.exenotepad.exeを終了するプロセス名に置き換えます。

ステップ2: 画面をロックしたときにスクリプトを実行するようにスケジュールする

開けるタスクスケジューラ(スタートメニューで検索できます)、右クリックタスク スケジューラ ライブラリ選択してタスクを作成...一般的なタブでタスクの名前と説明を入力します。設定対象:Windows 7、Windows Server 2008 R2 の場合必要であればそうしてください。ただし、必須ではありません。

タスクの作成 - 全般タブ

上のトリガータブで新しいトリガーを作成し、設定しますタスクを開始します:ワークステーションのロック残りのデフォルト設定は問題ありません。

タスクの作成 - 新しいトリガー

上の行動タブで新しいアクションを作成し、プログラムを開始するプログラム/スクリプト:すべきであるスクリプトterminate.vbs終了したいパスとプロセス名を引数を追加します(オプション):私の主張は"C:\Users\Public\Documents\terminate.vbs" notepad.exe

タスクの作成 - 新しいアクション

確認するには条件そして設定その他のオプションについてはタブを参照してください。ただし、ここでは必要ありません。タスクを保存すれば完了です。画面をロックすると、プロセスは終了します。

画面をロックし、すぐにロックを解除すると、コマンド プロンプト ウィンドウが表示されたり、終了したいプロセスがまだ終了処理中であったりする場合があります。これは、プロセスが正常に終了するまでにかかる時間によって異なります。

答え3

WTSRegisterSessionNotification()待機するためにプログラムを書くことができますWTS_SESSION_LOCKイベントに参加して必要なことを行います。

例は次の場所にあります:https://superuser.com/a/264973/1686

関連情報