コンパイルしたEXEファイルを実行し、終了してもWindowsのシステム情報→実行中のタスクを覗くと実行中のままになっています。
正常にプログラムを終了させる方法というのがあるのでしょうか?
コードが間違っているのでは?
確かに、終了ボタンでは
unload me
としてるだけですが、windowのxボタンで終了しても同じです。
それとも、他の部分が影響したりするのでしょうか?
普通は、 Unload Me だけで大丈夫ですよ。
# 情報が少なすぎて、回答できません。
例えば、非表示のフォームが Load されたままとか。
早速返答ありがとうございます。
ちなみに
unload me
ではなく
End
でした。
もう少し、詳しく説明しますとVB6で作成したアプリケーションを他のマシンで動かしたところウィンドウズmeだと、commandボタン(内容は End のみ)でアプリケーションを終わらせてもシステム情報に残ったまま。xボタン(window右上の)で終了させるとシステム情報から削除。
XPだとそのどちらでもシステム情報に残ったままなんです。
ちなみに作成したマシンはmeです。
ちゃんと削除されるようにしたいんですが、というか普通はなるんですよね。
普通なるハズのものがならないので、おかしいと思いご意見を伺おうかと思ったのですが。
API:
GetExitCodeProcess
GetCurrentProcess
ExitProcess
を宣言して、
Dim pEnd&
Call GetExitCodeProcess(GetCurrentProcess(),pEnd)
ExitProcess(pEnd)
とすれば通常の残骸はなくなると思います。
(メモリエラーがでますが、EXEファイルにすれば大丈夫です。)
まだ解決チェックされてないので便乗します。
ちょっと中身は忘れましたが、
For Each文をつかって、
すべてUnload してまわるのがあったと思います。
私も普段Endを使ってますが、
Endは推奨されないとかどっかに書いてあったような気が。
ロードされている全フォームをアンロードする方法
Dim i As Integer
''Forms コレクションに含まれるフォームを順にアンロードします。
For i = Forms.Count - 1 To 0 Step -1
Unload Forms(i)
Next
”緊急”といっておきながら、レスもせずにもうしわけありません。
それで教えていただいたものを試してみたのですが、Commandボタンにたきさんが書き込まれたコードをいれたら正常に終了するようになりました。
しかし、やはりwindowsのタイトルバー右にあるxボタン(閉じるボタン)で終わらせるとシステム情報に残ったままなんです。
このXボタンを押したときに何かプログラムを走らせれば解決しそうなんですが、これってどう書いたらいいんでしょうか?たとえば
privat sub Form_unload()
とかそういうの、すみませんがおしえていただけないでしょうか?
FormのQueryUnloadイベント調べてみ。
Unloadイベントですか、知りませんでした。
それで、今回の件に関しては解決はしたのですが、2つほど質問させてください。
これを使うと、例えばいくつかフォームがあって、form1から他のフォームを開くとき、vbModeless でform1をunloadさせる場合にもイベントが発生してしまって他のフォームを開けなくなってしまうんじゃないでしょうか?
それと、原因がいまだわからないのでどういった理由でこういう現象がおきるのですか?
UnloadイベントじゃなくてQueryUnloadイベントです。
UnloadMode引数によって処理を分ければ良いです。
てゆーかMSDN調べてください。
ツイート | ![]() |