Windows 7 で画面をロックするたびにプログラムを自動的に終了する方法はありますか?
答え1
grawityの提案によると、私が置いたバッチファイルは使用しないでくださいこの回答の最後にあります。これはrundll32.exe
ではないWin32 API関数の呼び出し規約に一致しますLockWorkStation
(このMSDNブログエントリ詳細については、こちらをご覧ください。そうは言っても、それほど手間がかからない、より良い代替手段があります。
あなたはAutoIt スクリプト言語そしてそのDllCall
関数を使用すると、コールスタックを破壊せずにWin32 API関数を呼び出すことができます。ProcessClose
の代わりにTASKKILL
。参考までに、ここはLockWorkStation
MSDN からの参照。
次の 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.exe
。notepad.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