• ベストアンサー

シャットダウン処理を中止したい

Windows(XP、7)で「スタート」→「シャットダウン」を実施したら、 下記メッセージを出力するところまではできたのですが、 シャットダウン処理を中止できずに、電源がOFFになってしまいます。 A = MsgBox("メッセージ",vbOKCancel,"確認") If A = vbcancel Then objWshShell.Run "C:\Windows\System32\shutdown.exe -a" End If 自分の知識が無い為に、どこが悪いのかがわかりません。 どなたかご存知の方がいらっしゃれば教えていただけないでしょうか。 宜しくお願いします。

  • a0510
  • お礼率54% (6/11)

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.4

>>shutdown.exeを実行する際にタイムアウト時間を設定していない >これはどこで設定されているのでしょうか? スタート→シャットダウンでは設定できません。 スタート→シャットダウンは待機することなく稼働中のプロセスに対し即「今からシャットダウンするので終了処理を行ってください」と通知がいきます。 ですので仮にシャットダウンをキャンセルできたとしても終了処理をしてしまったプロセスはシャットダウン開始前の状態には戻りません。

a0510
質問者

お礼

ご回答、ありがとうございます。 →スタート→シャットダウンでは設定できません。 そうだったんですね・・・。 シャットダウンを途中で中止することはできないのですね。 一つ勉強になりました。

その他の回答 (3)

  • kteds
  • ベストアンサー率42% (1875/4423)
回答No.3

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 です。

  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.2

簡単にテストしたのですがその時OSは既にシャットダウンが確定して プロセスを実行しているためコマンドラインでシャットダウン中止しても 無効なのではないでしょうか 手元で試した限り どうあがいても該当コマンドを終了時スクリプトで動かしても無理でした 常駐アプリを作成してOSの終了検知してキャンセルするしかないような気がします

a0510
質問者

お礼

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

  • kteds
  • ベストアンサー率42% (1875/4423)
回答No.1

shutdown.exeを実行する際にタイムアウト時間を設定していないか、 タイムアウト経過後に shutdown.exe -a を実行しているからでしょう。

a0510
質問者

お礼

>shutdown.exeを実行する際にタイムアウト時間を設定していない これはどこで設定されているのでしょうか?

関連するQ&A

  • シャットダウン前にソフトを起動するには?

    お世話になります。 どなたか教えてください。 WINDOWSのシャットダウンの前に、OKorキャンセルのメッセージを出し、 OKならあるソフトを起動し、シャットダウン操作をキャンセル。 キャンセルならそのままシャットダウン操作を続行したいのですが、 どうしたらいいでしょうか? グループポリシー→Windowsの設定→スクリプト→シャットダウンの所に下記のスクリプトを追加しましたが、自己完結するソフトではなくユーザーが操作するソフトの場合はダメなようです。 タイミング的にはスタート→シャットダウン→ここでメッセージを出したい→Windowsのシャットダウンのダイアログ 追加しようと思っているスクリプト Option Explicit 'オブジェクト変数の宣言とWshShellオブジェクトの作成。 Dim objWshShell Set objWshShell = WScript.CreateObject("WScript.Shell") If MsgBox("ソフトを起動するには『キャンセル』ボタンを押してください。  " _ , vbOKCancel) = vbcancel Then 'ソフトを起動。 objWshShell.Run """C:\Program Files\ソフト名.exe""" End If Set objWshShell = Nothing 質問のカテゴリーもここで良いのかどうかはっきりしませんが、どうぞよろしくお願いいたします。

  • End If に対応する If ブロックがありませ

    i = MsgBox("終了しますか?", vbOKCancel) If i = vbCancel Then End End If が、 コンパイルエラー End If に対応する If ブロックがありません。 になるのですが、なぜでしょうか? If もEnd If もあるのに・・・

  • VBAで中止したいのですが、どうすれば良いのでしょうか。(素人ですので

    VBAで中止したいのですが、どうすれば良いのでしょうか。(素人ですのでよろしくお願いします) D3が空欄の場合は、メッセージを出して、中止したいのです。 以下のようですと、メッセージ表示の後、続けて動作します。どうすれば良いのでしょうか。 よろしくお願いします。 Range("D3").Select If Range("D3").Value = "" Then MsgBox ("D3に入力して下さい") End If

  • メモ帳を、IME入力モード「あ」で開く構文について

    メモ帳を起動したとき、IMEの入力モードが、通常、半角英数「A」で開くようになっています。そのメモ帳を、IMEの入力モードが、ひらがな「あ」で開くようにしたいのですが、何度、試しても、うまくできません。 次の(1)に、(2)を、どこに、どのように、追加すればよいか、お教えください。 構文が、間違っておりましたら、ご指摘くださいますよう、お願いいたします。 よろしく、お願いいたします。 (1) Option Explicit Dim objWshShell Set objWshShell = WScript.CreateObject("WScript.Shell") objWshShell.Run "C:\Windows\System32\notepad.exe" Set objWshShell = Nothing (2) Sub IMEの初期入力モードをひらがなに設定する() If IMEStatus <> vbIMEModeHiragana Then SendKeys "{kana}", True End If End Sub

  • Vbscriptエラー

    vbでメッセージBOXを用いてプログラムを起動できるようにしたいのですがエラーが出てしまいます。「インデックスが有効範囲にありません。」 どこが間違っているのでしょうか? ーーーーーーー Dim objWShell Dim a Dim b a = MsgBox (" 「」を利用。"&Chr(13)&Chr(13)&_ "    「」?    "&Chr(13)&Chr(13)&Chr(13)&_ " ---------------------------- "&Chr(13)&_ "  お問い合わせください。" , vbYesNo,"「r」") ' MsgBox vbYes&"="&a If a = vbYes Then Set objWShell = CreateObject("WScript.Shell") b = WScript.Arguments(0) If b = 0 Then objWShell.Run "C:\Windows\System32\notepad.exe" ,vbNormalFocus,False ' End If End If ーーーーー

  • 効率の良いテキストボックスの検知について

    VB6の初心者です。質問させていただきます。 画面上に5つのテキストボックス(TEXT1、TEXT2、TEXT3、TEXT4、TEXT5)と 1つのコマンドボタン(Cmd_SAVE)があり、 画面上の5つのテキストボックスをすべて記入し、 コマンドボタンを押すと、登録確認のメッセージボックスが表示され、 OKボタンを押すと、サーバへ転送され、 画面上のテキストボックスにひとつでも空欄があると、どのテキストボックスが 空欄であるかを示すメッセージが表示される処理をさせています。 そこで質問なのですが、今、メッセージボックス、登録処理は出来るようになったのですが、 とても処理の効率が悪い、もっと空欄を確認するのにすっきりとしたコードはある、と知り合いに言われました。 おそらく、繰り返し等を用いると思うのですが、メッセージにそれぞれのオブジェクト名を代入するやり方がわかりません。 下記が今のコーディングです。 Private Sub Cmd_SAVE_Click()   If TEXT1.Text = "" Then      MsgBox "TEXT1が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT2.Text = "" Then      MsgBox "TEXT2が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT3.Text = "" Then      MsgBox "TEXT3が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT4.Text = "" Then      MsgBox "TEXT4が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If TEXT5.Text = "" Then       MsgBox "TEXT5が登録されていません", vbOKOnly, "警告"     Exit Sub   End If   If MsgBox("入力データを登録しますか?", vbOKCancel, "登録確認") = vbCancel Then     Exit Sub   End If   End If ~登録処理~ End Sub どのような書き方がきれいで、効率的なコーディングなのでしょうか? ご教示お願いします!

  • VBAコード実行を中止する方法は?(1プロシージャだけでなく)

    Exit Subは子だけしか中止できないのですね。 子でエラー起きたら、親もその他もまとめて中止することはできないのでしょうか? Sub 子()   Dim i As Integer   For i = 0 To 5     If 3 < i Then       '' ここで親も終了したい     End If     MsgBox i   Next End Sub Sub 親()   子   MsgBox "エラーならここまで来ないで" End Sub

  • キャンセルボタンをクリックしたかどうかを取得したい

    InputBoxでもしキャンセルボタンが押されたら・・・ってどうやればいいですか? Sub あああ() Dim a As String a = InputBox("文字を入れてください。") MsgBox a End Sub をした時に、キャンセルボタンをクリックしたかどうかを取得したいのですが、どうすればいいんですか? a = InputBox("文字を入れてください。") の次に Cancel = True をいれても vbCancel = True をいれてもエラーになります。 Sub あああ() Dim a As String a = InputBox("文字を入れてください。") If a = "" Then MsgBox "キャンセルが押されました" End If End Sub これだとOKでもキャンセルでもメッセージが表示されます。

  • プログラムについて。

    Private Sub btn_削除_Click() Flg_修正削除 = 2 If 整合性チェック処理 = 1 Then Exit Sub If MsgBox(\"削除してもいいですか?\" & vbNewLine & vbNewLine & \"削除したデータは復旧できません\", vbOKCancel) = vbCancel Then Exit Sub DoCmd.OpenQuery \"sp_MST_AAA情報_削除\" Call 更新後処理 Call 画面項目削除 MsgBox \"削除されました\", vbInformation End Sub これは削除ボタンを押したら削除処理がなされるイベントプロシージャーなのですが、見ていて意味が分かるのがメッセージBOXに表示される言葉だけです。他はどのような意味を持っているのでしょうか??

  • 乱数の利用

    僕の通う中学校では、乱数を利用してプログラムを作成することになりました。そしてプログラムを作りましたがステートメントがないと出てきます。どう解決すればよいでしょうか?これがプログラムです。 Dim a,b,c,d,e,f,g a=msgbox("幸せですか?",4) if a=6 then const b="運勢" randomize b=int(rnd*10) select case b case 0,1,2 c=messagebox("吉でした。彼女はいますか?",4) if c=6 then msgbox"90%",,b elseif c=7 then msgbox"60%",,b end if case 3,4,5 d=msgbox("凶でした。友達はいますか?",4) if d=6 then msgbox"60%",,b elseif d=7 then msgbox"20%",,b end if case 6,7 e=msgbox("末吉でした。",4) if e=6 then msgbox"60%",,b elseif e=7 then msgbox"40%",,b end if case 8 f=msgbox("大凶でした。夢はありますか?",4) if f=6 then msgbox"30%",,b elseif f=7 then msgbox"10%",,b end if case else msgbox"100%",,b end if elseif a=7 msgbox"0%" end select