アプリ版:「スタンプのみでお礼する」機能のリリースについて

Windows(XP、7)で「スタート」→「シャットダウン」を実施したら、
下記メッセージを出力するところまではできたのですが、
シャットダウン処理を中止できずに、電源がOFFになってしまいます。

A = MsgBox("メッセージ",vbOKCancel,"確認")
If A = vbcancel Then
objWshShell.Run "C:\Windows\System32\shutdown.exe -a"
End If

自分の知識が無い為に、どこが悪いのかがわかりません。
どなたかご存知の方がいらっしゃれば教えていただけないでしょうか。

宜しくお願いします。

A 回答 (4件)

>>shutdown.exeを実行する際にタイムアウト時間を設定していない


>これはどこで設定されているのでしょうか?

スタート→シャットダウンでは設定できません。
スタート→シャットダウンは待機することなく稼働中のプロセスに対し即「今からシャットダウンするので終了処理を行ってください」と通知がいきます。
ですので仮にシャットダウンをキャンセルできたとしても終了処理をしてしまったプロセスはシャットダウン開始前の状態には戻りません。
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。
→スタート→シャットダウンでは設定できません。

そうだったんですね・・・。
シャットダウンを途中で中止することはできないのですね。
一つ勉強になりました。

お礼日時:2013/06/10 10:11

No.1 の補足です。


質問者さんのWSHは必ずしもベターだとは思いませんが、そのまま活かして使うとすれば下記のように、3行を追加して実行してみてください。
シャットダウンのタイムアウトは「追記」参照。
サンプルでは600秒に設定しています。
実行すると600秒後にシャットダウンが実行されます。
メッセージBOXの「OK」を押してもシャットダウンは実行されます。
600秒以内に「キャンセル」を押せばシャットダウンは取り消されます。
実行時にはスクリプトを右クリック -> 「管理者として実行」を行なってください。
あとは自分で応用してください。

Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")
objWshShell.Run "C:\Windows\system32\shutdown.exe -s -t 600"

A = MsgBox("メッセージ",vbOKCancel,"確認")
If A = vbcancel Then
objWshShell.Run "C:\Windows\System32\shutdown.exe -a"
End If

「追記」
-t xxxxxxxxx
のようにオプションを指定するとシャットダウンまでのタイムアウト期間を xxx 秒に設定します。
有効範囲は 0 から 315360000 (10 年) までで、既定値は 30 です。
    • good
    • 0

簡単にテストしたのですがその時OSは既にシャットダウンが確定して


プロセスを実行しているためコマンドラインでシャットダウン中止しても
無効なのではないでしょうか 手元で試した限り
どうあがいても該当コマンドを終了時スクリプトで動かしても無理でした

常駐アプリを作成してOSの終了検知してキャンセルするしかないような気がします
    • good
    • 0
この回答へのお礼

貴重なご意見、ありがとうございます。

お礼日時:2013/06/10 10:06

shutdown.exeを実行する際にタイムアウト時間を設定していないか、


タイムアウト経過後に shutdown.exe -a を実行しているからでしょう。
    • good
    • 0
この回答へのお礼

>shutdown.exeを実行する際にタイムアウト時間を設定していない

これはどこで設定されているのでしょうか?

お礼日時:2013/05/23 11:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!