前回、ログオン&ロック解除時に処理を自動実行する方法をブログ化しました。
この方法にはWindows Updateによる自動再起動時にも処理が実行されてしまったり、その後のログイン時に(OSやブラウザーが余計な気を利かせて復元してしまい)ロック時の処理を再実行してしまうという問題がありました。
この解決策をいろいろと考えてみましたが、単純にタイマーを付加することでほとんど解決することに気づきました。
Windows Updateによる再起動時には処理は中断されるので、タイマーで待っていれば実行されません。ロック時には当然、タイマー後に処理が実行されます。ログイン・ロック解除時にもタイマーで待つので、問題があれば手動でキャンセルできます。
もう一つのノウハウとして、特定のファイルを用意することで実行をキャンセルする方法もあります。これをクラウドで同期しているフォルダーに設置・指定すれば、リモートから動作をキャンセルすることが可能です。
リモートログイン時にも処理が起動してしまう問題も、上の2つの方法でおおよそ防げます。
これらのノウハウを総合して、現時点で私が重用しているvbsファイルの例(一部抜粋)を下に示します。この例では特定のURLをChromeで開く処理を想定しています。また、15秒あれば、PCが再起動して処理が中断されるというように想定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | Dim WshShell, BtnCode Set WshShell = WScript.CreateObject("WScript.Shell") Set FileObj = CreateObject("Scripting.FileSystemObject") If FileObj.FileExists("c:\Users\?????特定のパス名?????") Then WScript.Echo "スキップします。" Else BtnCode = WshShell.Popup("???を実行しますか?", 30, "???", 4 + 32) Select Case BtnCode case 6 ' Yes WshShell.Run "chrome.exe https://?????URL?????", 5, TRUE ' Wscript.Sleep 15000 ' WshShell.SendKeys "%{F4}" ' WScript.Echo "???を実施後、ブラウザーを閉じました。" case 7 ' No WScript.Echo "???をキャンセルしました。" case -1 ' Timeoutも実行 WshShell.Run "chrome.exe https://?????URL?????", 5, TRUE ' Wscript.Sleep 15000 ' WshShell.SendKeys "%{F4}" ' WScript.Echo "???を実施後、ブラウザーを閉じました。" End Select End If |