質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

2回答

11620閲覧

VBScriptで、メッセージ出現後、シャットダウンする。

kazu8514YT

総合スコア12

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2019/03/30 06:54

編集2022/01/12 10:55

#実現したいこと
VBScriptで、とあるメッセージを出現後、シャットダウンを行いたいのですが、この後、シャットダウンが出来ません。
##出来ているソースコード

ここに言語を入力 ``` ここに言語を入力 ``` Option Explicit Dim num,x num = 2 Do While True num = MsgBox ("シャットダウンを行いますか?",16,"シャットダウン") If num = 1 Then Exit Do Loop MsgBox "シャットダウンを始めます",16,"はじめます" WScript.Sleep(10000) MsgBox "シャットダウン(仮)が完了しました。",16,"完了" WScript.Sleep(3000) MsgBox "警告:C:\Windows\system72\シャットダウンが出来ません!",16,"Windows" MsgBox "警告:C:\Windows\system72\シャットダウンが出来ません!",16,"Windows" WScript.Sleep(20) MsgBox "警告:C:\Windows\system72\シャットダウンが出来ません!",16,"Windows" WScript.Sleep(1000) MsgBox "警告:C:\Windows\system72\シャットダウンが出来ません!",16,"Windows" WScript.Sleep(1000) MsgBox "警告:C:\Windows\system72\シャットダウンに失敗しました!",16,"Windows" MsgBox "警告:C:\Windows\system72\シャットダウンに失敗しました!",16,"Windows" WScript.Sleep(1000) MsgBox "警告:C:\Windows\system72\シャットダウンに失敗しました!",16,"Windows" WScript.Sleep(2000) MsgBox "警告:C:\Windows\system72\このpcを消すことは、不可能です",16,"Windows" MsgBox "警告:C:\Windows\system72\シャットダウンすると、起動できなくなります!",16,"Windows" WScript.Sleep(1000) MsgBox "警告:C:\Windows\system72\pcをシャットダウンします",16,"Windows" MsgBox "警告:シャットダウン中",16,"Windows" CreateObject("WScript.Shell").Run "shutdown /s/t0", 0, False ```

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/03/30 06:58

このコードではどういう動作をするんでしょうか
kazu8514YT

2019/03/30 07:34

最初に、シャットダウンしますか?という警告文が出て、キャンセルを押しても、ループします。okを押すと、シャットダウンを始めます。と警告文が出て、そこからは、okしか押せなくなっています。最後のokを押すと、終わりです。
imihito

2019/03/30 07:34

① コードの前後の行に「```」を追加して、コードを見やすくしてください(コードを選んで「<code>」ボタンでも可) ② MsgBox の引数や返り値には数字を指定せず、定義済みの定数の組み合わせを記載してください(何をしているのかわかりにくいので)。 例) 49 = vbExclamation Or vbOKCancel 16 = vbCritical
YakumoSaki

2019/03/30 10:44

最後の行の `shutdown /a` は、シャットダウンの中止の意味なのでこれが怪しいように思えます。 即時シャットダウンするなら `shutdown /s /t 0` あたりじゃないかなと思います。
otn

2019/03/30 17:24

> とあるメッセージを出現後 具体的にどういう意味ですか?
kazu8514YT

2019/03/31 05:31

ソースコードにも、あるように、シャットダウン失敗のメッセージです。
otn

2019/03/31 11:18

シャットダウン失敗のメッセージを出した後、シャットダウンしたいと言うことですか?
otn

2019/04/01 04:55

いたずらプログラムですか?
kazu8514YT

2019/04/01 08:58

悪戯はしませんけど、そうです。
guest

回答2

0

いたずらプログラムということで、全体としてどういう動きにしたいのか想像が付かないため、その辺は正しいとして、

シャットダウンのコマンドは、"shutdown /s/t"では駄目です。/tを指定した場合はその後に待機する秒数が必要。"shutdown /s"(1分後にシャットダウンを開始)とか、"shutdown /s /t 0"(直ちにシャットダウンを開始)とか。

投稿2019/04/01 09:53

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

※ 回答ではありません

(少なくとも私には)提示されているコードからやりたいことが読み取り切れません。

現状のコードの大まかなブロックに分けたものが以下になります。
以下の流れのうち、意図していない挙動の部分、足りてないブロックは何ですか?

① ユーザーが OK を押すまでひたすらメッセージボックスを表示(OK以外は無視される)。

該当箇所

vbscript

1Do While True num = MsgBox ("シャットダウンを行いますか?",16,"シャットダウン") 2If num = 1 Then Exit Do 3Loop
② 各種メッセージを表示。

vbscript

1MsgBox "シャットダウンを始めます",16,"はじめます" 2WScript.Sleep(10000) 3MsgBox "シャットダウン(仮)が完了しました。",16,"完了" 4WScript.Sleep(3000) 5MsgBox "警告:C:\Windows\system72\シャットダウンが出来ません!",16,"Windows" 6MsgBox "警告:C:\Windows\system72\シャットダウンが出来ません!",16,"Windows" 7WScript.Sleep(20) 8MsgBox "警告:C:\Windows\system72\シャットダウンが出来ません!",16,"Windows" 9WScript.Sleep(1000) 10MsgBox "警告:C:\Windows\system72\シャットダウンが出来ません!",16,"Windows" 11WScript.Sleep(1000) 12MsgBox "警告:C:\Windows\system72\シャットダウンに失敗しました!",16,"Windows" 13MsgBox "警告:C:\Windows\system72\シャットダウンに失敗しました!",16,"Windows" 14WScript.Sleep(1000) 15MsgBox "警告:C:\Windows\system72\シャットダウンに失敗しました!",16,"Windows" 16WScript.Sleep(2000) 17MsgBox "警告:C:\Windows\system72\このpcを消すことは、不可能です",16,"Windows" 18MsgBox "警告:C:\Windows\system72\シャットダウンすると、起動できなくなります!",16,"Windows" 19WScript.Sleep(1000) 20MsgBox "警告:C:\Windows\system72\pcをシャットダウンします",16,"Windows" 21MsgBox "警告:シャットダウン中",16,"Windows"
shutdown.exeを非表示で実行(パラメータの指定が間違っているためヘルプを表示して終了)。

vbscript

1CreateObject("WScript.Shell").Run "shutdown /s/t", 0, False

参考

質問のコードを私目線で読みやすくしたものが以下になります(「各種メッセージを表示」は省略)。

vbscript

1Option Explicit 2 3Dim num 'As VbMsgBoxResult 4num = vbCancel 5 6'1. ユーザーが OK を押すまでひたすらメッセージボックスを表示(OK以外は無視される)。 7Do While num = MsgBox("シャットダウンを行いますか?", vbExclamation Or vbOKCancel, "シャットダウン") 8 9 If num = vbOK Then Exit Do 10 11Loop 12 13 14'2. 各種メッセージを表示。 15MsgBox "シャットダウンを始めます", vbCritical, "はじめます" 16WSH.Sleep 10000 17 18'中略 19 20 21'3. `shutdown.exe`を非表示で実行(パラメータの指定が間違っているためヘルプを表示して終了)。 22Const WshHide = 0 23CreateObject("WScript.Shell").Run "shutdown /s/t", WshHide, False

投稿2019/03/31 07:00

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazu8514YT

2019/04/03 17:31

まず、足りてないブロックはありません。 意図していない挙動としては、ヘルプが表示されていないことです。 .vbsにして、開いてみたのですが、パラメータの指定ミスによる、ヘルプが表示されませんでした。 そして、私は、各種メッセージを表示した後、シャットダウンを行いたいと考えています。 返信遅れて申し訳ありません。
imihito

2019/04/03 22:04

> ヘルプが表示されていないことです。 表示されないように記述しているからです。 `Run`メソッドにより、`shutdown.exe`が単独で実行されます。 `shutdown.exe`のみに着目すれば以下のような動作をします。 1. プロンプトが新たに表示される(`shutdown.exe`はコマンドラインプログラムなので) 2. `shutdown.exe`の処理が実行される(今回の場合、プロンプトにヘルプが出力される) 3. ヘルプの出力が完了したら`shutdown.exe`が終了するので、プロンプトが閉じる ただし、`Run`メソッドの第2引数に 0 (= WshHide = ウィンドウ非表示で実行) を指定しているため、 上記の「1. プロンプトが新たに表示される」のプロンプトが非表示になり、結果として何も起きていないように見えるだけです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問