お世話になります。
どなたか教えてください。

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

質問のカテゴリーもここで良いのかどうかはっきりしませんが、どうぞよろしくお願いいたします。

A 回答 (2件)

丁度私も今それをやっていたので。


「グループポリシー→Windowsの設定→スクリプト→シャットダウンの所に下記のスクリプトを追加」
は、いいと思います。
そこでバッチファイルを指定します。
バッチファイルの中は以下の通り。
--------------------------------------------
(1) シャットダウンをいったんキャンセル
(2) UIのあるExeを起動
(3) もう一度シャットダウン
--------------------------------------------
shutdown.exe -a
C:\hoge\シャットダウン前の確認.exe
shutdown -r -t 0
--------------------------------------------
こんな感じです。

しかしこれ、Windows Update が当たってからスクリプトが起動するため
うちでは、毎回大量のWindows Updateを当てながらみんな帰ってしまうため
もうひと知恵いるところです。

情報がありましたら教えてください。
ではでは。
    • good
    • 0

使用しているVBのバージョンや環境を書いてください。

    • good
    • 0
この回答へのお礼

回答ありがとうございます。


環境はWindowsXP(2000,7も少々あり)。vb6.0です。

会社のPCなんですが、フローティングライセンスのソフトをみんなで使っています。
退社時にWEB上にあるライセンスロッカーにライセンスを返却するのを忘れる人が多いので、
こうしたものを作りたいなと思った次第です。

私はExcelのVBAを少々やっている程度なので、すぐには理解不能ですが、参考にさせていただきます。

お礼日時:2011/04/15 16:50

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qスタートメニューから強制ログオフ・シャットダウン

スタートメニューからのログオフ・シャットダウンにて、強制的にログオフ・シャットダウンできる方法を探しています。
質問の背景:
子供のコンピューター使用時間を管理するために、何種類かのソフトをいれましたが、そのアプリケーションを終了させる方法を子供たちが見つけてしまいました。(10歳ー14歳です)
方法は、メモ帳やワードなど何でもいいのですが2つ以上のウィンドウを開き、保存するかどうかのメッセージを表示させるために何か記入します。
その後、ログオフ・シャットダウンを試み、キャンセルを選択するとほかにもエラーメッセージなどが出たり出なかったりしますが、結果的にログオフ・シャットダウンが中止され、起動していたアンチウイルスを含めたアプリケーションのほとんどが終了してしまいます。そして、コンピューターを継続使用可能となってしまいます。XP Pro を使用しています。
タスクマネージャーやコマンドプロンプト、グループポリシーなどにはアクセスできないように設定してあります。

ちなみに、ショートカットキーに-fなどを追加して実行すれば、強制ログオフ・シャットダウンは時々可能ですが、これを普通にログオフ・シャットダウンするところからの連携などは不可能でしょうか?
または、レジストリーキーなどの書き換えで、キーボード操作済みでの強制操作ができる方法などありますか?
それができない場合には、このような状況に負けない(起動時から終了時まで動くソフト?)などを探しています。

キーロガーなどは子供たちがどのようにログを見れるかすでにいくつかのキーロガーを調べたらしく発見済み(フォルダーや開くためのキーを知っている)で、アドミニストレーターのパスワードも見えてしまいそうで導入する前から躊躇しております。

詳しい方、アドバイスよろしくお願いします。

スタートメニューからのログオフ・シャットダウンにて、強制的にログオフ・シャットダウンできる方法を探しています。
質問の背景:
子供のコンピューター使用時間を管理するために、何種類かのソフトをいれましたが、そのアプリケーションを終了させる方法を子供たちが見つけてしまいました。(10歳ー14歳です)
方法は、メモ帳やワードなど何でもいいのですが2つ以上のウィンドウを開き、保存するかどうかのメッセージを表示させるために何か記入します。
その後、ログオフ・シャットダウンを試み、キャンセルを...続きを読む

Aベストアンサー

>プロセスをまとめているもの
ちょうどタスクマネージャのプロセスタブのプロセスを一つずつ終了させているようなもので、終了はshutdown.exeが行っていますが、シャットダウンの順番待ちのプロセスをまとめているというより、他のツールが保持しているプロセスのリストを借りていルのではないかと思います。


>そのプロセスの時間を短くするなり、長くするなりすると、ログオフ時に作動させたいアプリケーションが開くことが可能なのか・・・とか。
Windowsm標準の機能では個別には無理でしょう。
shutdown.exeを実行すればすべてが終了します。その終了の途中で応答がなかったプロセスに対して無条件で強制終了をするなどの設定はできますが、それでも個別のプロセスに対して行う事はできないはずです。
やはり細かな設定がしたいなら外部のツールが必要になると思います。

ツールには時間が来たら特定のプログラムだけを強制終了させるものもあるでしょうし、お子さんの目を欺くには、日ごとに複数の終了手段を使い分けるといいかもしれません。

Qパソコンのリモート起動・シャットダウンの方法について

VB:VB6.0sp5

端末A
os:windows2000pro
IP:192.168.1.10
Physical Address:00-11-22-33-44-55
端末B
os:windows2000pro
IP:192.168.1.11 の場合、
Physical Address:00-12-34-56-78-90

(1)VBプログラムでどのようにすれば良いのでしょうか?

(2) また、RS-232C や USB 等でも可能でしょうか?
 何か便利ツール等ございましたらご紹介くださいます様

よろしくお願いいたします

Aベストアンサー

http://oshiete1.goo.ne.jp/kotaeru.php3?q=435498
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1186493

QWindows2000Serverのログオフ中でもシャットダウンしたい

ログオフ中にタスクスケジュールで自動的にシャットダウンするソフトがないかWeb上を物色はしてみたのですが、ほとんど(ヒットしたソフトすべてを確かめたわけではありません)がタスク常駐タイプのものしか見あたりませんでした。
ログオフ中でもタスクスケジュールでWindows2000Serverシャットダウンさせるすべをご存じの方がおりましたら、ご伝授願えないでしょうか?
よろしくお願いします。

Aベストアンサー

Windows2000でしたら、これをバッチにしてスケジューラに登録したらどうなるでしょうか?

Rundll32.exe Shell32.dll,SHExitWindowsEx 1

Qシャットダウンの関数

VB6.0で、PCのシャットダウンを行う関数ってありますでしょうか?
ご回答よろしくお願い致します。

Aベストアンサー

下記。

参考URL:http://homepage1.nifty.com/MADIA/vb/API/VBWINEXIT.htm

QVB6でシャットダウン、ログオフを感知

VB6でwindowsがシャットダウン、ログオフ、再起動する前に特別な処理をしたいのですがVB6シャットダウンを感知する方法がわかりません(ToT)
知っている方がいましたら教えて下さいよろしくお願いします。
※windowsは2000proです。

Aベストアンサー

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If (UnloadMode = vbAppWindows) Then
'特別な処理
End If
End Sub

UnloadModeがvbAppWindowsなのは、シャットダウン、ログオフ、再起動の場合のみと思いますが、違いますか?

Qシャットダウンスクリプトの記述

ドメインに参加している WinXP クライアントから、ワークグループ環境の複数台の Windows Server 2003 (主に) に対して ping を実行し、ping に対して応答があった場合はシャットダウンするスクリプトを記述したいと考えています。

# ワークグループ環境の Windows Server 2003 は検証環境で、社内セキュリティポリシーの運用上ドメインに参加できません。

この場合、
1. 複数のマシンに ping を打つ
2. 1 で応答がかえってくれば管理者の資格情報を使用してログイン
3. シャットダウンを実行
という流れになると思います。

そして、最終的には 1 が成功した場合に If 構文で 2、および、3 を実行する、という
ように書けば一連の処理は成功すると考えています。

現在上記 1~3 の処理で細分化し、それぞれについて動作確認をとっています。
しかし、2、および、3 を実行してもうまくいかないため、これらについて伺いたく
質問させていただきます。

2 について

以下の構文を組んでいますが、vbs を実行すると、後述のエラーダイアログが表示されます
(対象 PC やアカウント名などはダミーとご認識ください)。
別の資格情報 (接続先マシンの管理者アカウント) を指定して接続できるコードをご教授ください。

-----
Const WbemAuthenticationLevelPktPrivacy = 6

strComputer = "atl-ws-01"
strNamespace = "root\cimv2"
strUser = "Administrator"
strPassword = "4rTGh2#1"

Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objwbemLocator.ConnectServer (strComputer, strNamespace, strUser, strPassword)
objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy

Set colItems = objWMIService.ExecQuery ("Select * From Win32_OperatingSystem")
For Each objItem in ColItems
Wscript.Echo strComputer & ": " & objItem.Caption
Next
-----

エラー : RPC サーバーを利用できません。
コード : 800706BA
ソース : SWbemLocator

3 について

以下の構文を組んでいますが、エラーは表示されないものの、シャットダウンが開始されません。

-----
On error resume Next

Const LogOff = 0 'ログオフ
Const REBOOT = 2 '再起動
Const SHUTDOWN = 8 'シャットダウン

Dim objWMIService
Dim colOperatingSystems
Dim objOperatingSystem
Set objWMIService = GetObject("winmgmts:{impersonationLevel= impersonate,(Shutdown)}\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
objOperatingSystem.Win32Shutdown(SHUTDOWN)
Next
Set objWMIService = Nothing
Set colOperatingSystems = Nothing
Call ErrorCheck
End Function
-----

また、試しに objNetwork.MapNetworkDrive を使用してサーバーの IPC$ に接続しログインした後に上記処理を試行しましたが、
シャットダウンが進みませんでした。

何卒よろしくお願いいたします。

ドメインに参加している WinXP クライアントから、ワークグループ環境の複数台の Windows Server 2003 (主に) に対して ping を実行し、ping に対して応答があった場合はシャットダウンするスクリプトを記述したいと考えています。

# ワークグループ環境の Windows Server 2003 は検証環境で、社内セキュリティポリシーの運用上ドメインに参加できません。

この場合、
1. 複数のマシンに ping を打つ
2. 1 で応答がかえってくれば管理者の資格情報を使用してログイン
3. シャットダウンを実行
という流れになる...続きを読む

Aベストアンサー

MapNetworkDrive はファイル共有サービスだから RPC とは別では?
win32shutdown rpc ファイアウォール
あたりのキーワードで検索してみてはどうでしょう。

Qログオフ、シャットダウン時にバッチファイルを実行

WIN2Kを使用しております。
ログオフまたはシャットダウン時に実行したい
バッチファイルがあります。
(ネットワークドライブを切断したい)
そのようなことは可能でしょうか?
よろしくお願いいたします。

Aベストアンサー

>ファイルを開くことまではできましたが、
>その先が分かりません。
>素人の私でもできますでしょうか?

せっかく開いたのでしたら、いろいろいじってみてくださいね。ヘルプを見るのも手です。


>(ネットワークドライブを切断したい)

ということであれば、ログオフ時ですよね。
#ネットワークドライブはユーザごとに設定するから。

では、設定方法です。
1.グループポリシーを開く(gpedit.msc)
2.ローカルコンピュータポリシーの中の、ユーザーの構成を開く。
3.Windowsの設定を開き、スクリプト(ログオン、ログオフ)を開く。
4.ログオフを開く
5.追加ボタンを押し、実行したいバッチファイルを指定する。

の手順です。

ちなみに、シャットダウンスクリプトは、コンピュータの構成のほうにあります。

QOSシャットダウン時の常駐アプリ終了について

現在VB2005にて常駐アプリの開発を行っています。
OSはWindowsXPです。
起動はOS起動時にスタートアップより起動するのですが、
OSのシャットダウン時に常駐アプリが終了していない為、
「このプログラムからの応答がありません(待機、終了、キャンセル)」が表示されます。
この方法を回避するには、シャットダウンを常駐アプリ側で検知してアプリ自身が終了処理をすると思いますが、方法がよくわかっていません。
http://dobon.net/vb/dotnet/system/sessionending.html
↑のURLを参照してみたのですが、シャットダウン時にメッセージの表示はされるのですが、メッセージ表示部をアプリ終了処理に置き換えても、終了処理が行われませんでした。
どなたか、お分かりになる方ご教授いただければと思います。

Aベストアンサー

クラスの生成で外部アプリを起動ってインスタンスの事です?
Newメソッド内でやってるなら、あまりよろしくないので今後はやめた方がよいかと・・・

それはさておき、外部アプリの終了ですが
恐らく新しいプロセスを生成して実行してると思います。
そのプロセスをkillメソッドでやっつけてやればいけませんか?
oboroxxさんの回答と同じですが。

Qログオフやシャットダウンできなくなりました。

PCにVigilというソフトをインストールしたら
PCが「Ctl + Alt + Del」キーを押下したとき表示される
セキュリティ画面(ログオフ、再起動、シャットダウン)を選択する画面)で
ログオフやシャットダウンできなくなりました。

具体的には、ログオフ、再起動、シャットダウンなどどれをラジオボタンで
選択して、OKボタンをクリックしても、全く反応しません。

電源スイッチで電源を一旦切るしかないと思いますが、
Windowsが起動しなくなるのが怖くて、電源スイッチで電源を切る勇気がありません。何かいい復旧方法ないでしょうか。
このようなトラブル(セキュリティ画面が反応しない)場合、
電源スイッチで電源を切った場合、Windowsが起動しなくなる可能性が強いでしょうか。

※PCはOS:Windows2000PRO、機種:VAIO PCG-SR9G/Kです。
※Vigilについて
http://homepage2.nifty.com/spw/software/vigil/

Aベストアンサー

Windowsが終了しないということは何かのプロセスが動いているのではないでしょうか?
タスクマネージャーを開いてvigilが動いているならそのプロセスを強制終了してみて下さい。
または何か怪しいプロセスが動いているため電源がおちないのかもしれません。

QEXCELのVBAマクロでパソコンをシャットダウンすることは可能でしょうか?

研究室でEXCELのVBAマクロを使ってシュミレーションをしているのですが、回すのに5時間くらいかかるものがあったりしてマクロを回しながら帰るときがあります。
計算が終わった後も朝自分が研究室に来るまでつきっぱなしなので、そこを何とかしたいのですがEXCELのVBAマクロでパソコンをシャットダウンすることはできますでしょうか?
使っているOSはWindows XPで、Officeは2003です。

Aベストアンサー

メモ帳に下記を貼り付ける。VBScriptです。
Set Win = CreateObject("Shell.Application")
Win.Shutdownwindows
拡張子.vbsで保存する。
デスクトップへ移す。
アイコンをクリック
でシャットダウンするはずです。
ーー
ただし
ここからが問題で、実行は余裕を見た時間経過の時間指定で終わらせる。
その際
・終了ルーチンに組み込めるか。
・タイマーなどを使えるか。
・エクセルのブッククローズなどのイベントと関連づけられないか
エクセルはApplication.Quitで終了すると思う。
・エクセルのタスク・プロセス処理の終了を捉える(この辺は詳しくないがAPI関数を使うのかな)
など研究してみてください。


人気Q&Aランキング