こんにちは。悩めるプログラマーです。
久しぶりに質問させて頂きます。
フォームにコマンドボタンを貼り付けて、そのボタンのClickイベントで
「Windowsの終了」ダイアログボックスを表示させ、「OK」ボタンを選択
したらそのままフォームをアンロードさせてWindowsも終了させる。
「キャンセル」ボタンを選択したらフォームに戻って処理を続行する。
…というような事をやりたいんです。
WindowsをシャットダウンさせるAPI(ExitWindows)なんかだとダイアログ
ボックスが出てこないしなぁと思いうまいこと引数でも取れないかと思ってる
ところです。
「ダイアログボックスを出す理由は?」と聞かれると、いきなりシャットダウン
では味気ないし…、というワガママ?な理由なんですけどね。(^-^)
長々と書き込みましたが、どなたかご存知の方、御教授願います。
単純にQueryUnloadで自前のダイアログ開いて、(MsgBoxでも可)
OKだったらシャットダウンして、キャンセルだったら
Cancelすればいいのでは?
最初は自前で作ったんですが…。
デザインがダサダサだったので。(-_-;)
まぁ、終了するかどうかの判断なんでデザインに
こだわる必要もないんですけどね。
「できるのかなぁ〜?」という興味本位的なところもあったので。
Dim shObj As Object
Set shObj = CreateObject("Shell.Application")
shObj.ShutdownWindows
Set shObj = Nothing
こんなことをすれば、シェルが出してるWindowsのシャットダウンダイアログが出せたりします。
ああ!!解答になってなかったです。Sorry....
私の場合は、QueryUnloadイベントでOSからの終了じゃなければ、
CancelをTrueして上で書いた処理をするようにやってました。
OSからの終了じゃなければ??
具体的にどういうコードを書くんですかね?
よろしければ教えて頂けます?
わがままですみません。m(。-_-。)m
私の場合、OKボタンのクリックイベントでフォームをアンロードしてQueryUnloadイベントで以下のようにしています。
上記の shObj.ShutdownWindows は戻り値はないので、シャットダウンかログオフ
か再起動かはたまたキャンセルされたかは分かりません。ので、
QueryUnloadイベントでは、vbAppWindows 以外は全て shObj.ShutdownWindows
を実行してアプリケーションは終了を中断します。
実際にshObj.ShutdownWindowsによってシャットダウンなりが実行されると、
再度 QueryUnload イベントで UnloadMode にvbAppWindowsがセットされてくるので、そのときはCancelしないで QueryUnload イベントを終了します。
タスクマネージャからの終了時は、シャットダウン処理をしないようにしていま
す。
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Dim shObj As Object
If UnloadMode <> vbAppWindows And UnloadMode <> vbAppTaskManager Then
Set shObj = CreateObject("Shell.Application")
shObj.ShutdownWindows
Set shObj = Nothing
Cancel = True
End If
End Sub
(* ^-^)ノできた〜!
batchmanさん感謝感謝です。
ツイート | ![]() |