OSシャットダウン時に常駐VBアプリを終了させるには?

解決


CLIP  2006-03-23 08:47:32  No: 130753

Windows98上で、VB6SP6のアプリを常駐起動させてます。
OSシャットダウン時(スタート⇒Windowsの終了⇒電源断)を
実施すると、
「このプログラムからの応答がありません(待機、終了、キャンセル)」
が表示され、いちいち「終了」を選択しないと終わりません。

Form_QueryUnloadイベント内で
    Unload Form1
    End
を実施しても同じです。
Form_QueryUnloadが呼び込まれていないような気もします。
(Form_QueryUnload内でMsgboxで、メッセージを出力しようとしても出ませんでした)
はまってます。どなたかご教授いただけないでしょうか。


ガッ  2006-03-23 09:27:42  No: 130754

単純なアプリケーションをつくり、現状のプログラムとどこが違うのか探ってみる必要が有るのでは?


CLIP  2006-03-23 18:11:24  No: 130755

ガッさんご連絡ありがとうございます。

あの後、単純なアプリを作成し、対象PGとの違いを確認しました。
大きな違いとしては、対象PGは3秒間隔でファイル監視している
処理がループしていることが分かりました。

この3秒間隔でループしている処理が継続されるがために
OSのシャットダウンでも落ちてくれないと思われます。
シャットダウンを感知してこの処理を終わらせることを
したいのですが、その方法をどなたかご教授いただけないでしょうか。

※他にいい方法があればご教授いただきたいです。


我龍院忠太  2006-03-23 19:26:25  No: 130756

QueryUnloadの最初で「3秒間隔でファイル監視している
処理のループ」を止めたらいかがでしょうか


CLIP  2006-03-24 06:23:30  No: 130757

我龍院忠太さんご連絡ありがとうございます。
皆様のおかけで解決することができました。

対応方法は、
Do
  DoEvents
  'hogehoge
Loop

としました。
DoEventsを入れることにより、Windows側に制御を返すようにし、
シャットダウン時、この制御が返されたタイミングでシャットダウン
するようになりました。

ありがとうございました。


ガッ  2006-03-24 06:37:50  No: 130758

それ、本当に終わっていますか?
たとえば次のコードの"様な"感じなのだとおもいますが、
下のコードはForm1を消してもプロセスは依然残ったままです

Option Explicit
Private WithEvents cmd As CommandButton

Private Sub cmd_Click()
    Dim i As Long
    cmd.Enabled = False
    Do
        DoEvents
        Me.Caption = i
        i = i + 1
    Loop
End Sub

Private Sub Form_Load()
    App.Title = "終わらないアプリケーション"
    Set cmd = Me.Controls.Add("VB.CommandButton", "cmd")
    With cmd
        .Move 0, 0, 1000, 1000
        .Visible = True
    End With
End Sub


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加