いつもお世話になっています。
画面遷移時にあるメッセージウィンドウ(別exe)をVBから起動させ、遷移が終わった後にそのexeを終了させるプログラムを作っています。
プログラムの中身としては、
(1) Shell関数でexe(メッセージウィンドウ)を起動
(2) FindWindowで、起動しているexeのハンドルを取得
(3) 取得したハンドルに、SendMessageでexeを閉じるようにする(WM_CLOSEを使用)。
・・・といったものです。
(1)と(2)はうまくいくのですが、最後のSendMessageがうまくいきません(>_<)
試しに(1)と(2)の後に、Do文の中で
[1]SendMessageで起動したexeを終了させるようにする
[2]FindWindowをして、ハンドルが0だったら、Exit Doする
・・・ようにプログラムしてみたところ、永久ループになってしまいました・・・。
他にも、SendMessageの代わりにShowWindowを使ってみましたが同じくダメでした・・・(T-T)
ネットで調べていますが、他の方法が浮かびません。
どなたか、良い方法をご存じでしょうか??
よろしくお願いします!!
No.6ベストアンサー
- 回答日時:
>今までにない現象で、そのユーザーのマシンのみでメッセージウィンドウが閉じないのです。
。。こういう大事なことは先に書いてください。
みなさん、全然動かないと思って回答してますよ。
>まず、問題のマシンはエンドユーザーが使用しているので、直接デバッグはできません。
リモートデバッグも出来ませんか?
No.5
- 回答日時:
参考URL:
[VB] Win32 アプリケーションを起動させ、終了させる方法
わたしには、よくわかりませんが。検索でヒット。
参考URL:http://support.microsoft.com/default.aspx?scid=k …
No.4
- 回答日時:
まず、PostMessageにしてどうなるか確認してください。
で、CloseしたいアプリはWM_CLOSEメッセージで本当に終了するものですか?
終了しないように組まれているんでしたらとっても意味が無いことをしているような。
この回答への補足
まず、問題のマシンはエンドユーザーが使用しているので、直接デバッグはできません。
通常PostMessage(引数をWM_CLOSE)をすれば、起動させたメッセージウィンドウは閉じます。
今までにない現象で、そのユーザーのマシンのみでメッセージウィンドウが閉じないのです。。。
No.3
- 回答日時:
>Dim Rtn As Long
>(2)Rtn = FindWindow("#32770", "")
>今のForm.Hide
>次のForm.Show
>(3)Call SendMessage(wnRtn, WM_CLOSE, 0&, 0&)
クラス名の#32770ですが、一般的なダイアログのクラス名です。これでチェックしても無駄です。たくさんある可能性のほうが多いです。というか、VBのフォームで作った場合、クラス名は違うはずなんですけど。一般的にVBのフォームのウィンドウハンドルを外部から取得する場合はキャプションを使用するしかないはずです。
また、FindWindowの引数の使い方も間違ってます。使用しないほうの引数は、""ではなくvbNullStringです。
あと、根本的なことですが、こんなことするよりも、別EXEをActiveX EXEで作ればこんな苦労することも無いと思いますけど。
この回答への補足
FindWindowに関しては、vbNullStringを使ってみましたが、やはり同じ状態でした。
実は、今、新規でメッセージウィンドウを作っているわけではなく、元にあるプログラムの修正をしている状態でなので、新しくexeの作り直しはできないのです・・・。
No.2
- 回答日時:
基本的な事をお尋ねしますが、その "#32770"クラスのメッセージウィンドウのハンドルは間違いなく正しく捕らえているのでしょうか?
良く見かけるクラス名と思ったので、それで特定して大丈夫なのかと...
そのメッセージウィンドウがGUIを持つならば、閉じるメニューが有効になっているのでしょうか?
単純な事なので、任意のメッセージを送れるツール等を使って確認した方が早いと思います。
この回答への補足
>基本的な事をお尋ねしますが、その "#32770"クラスのメッセージウィンドウのハンドルは間違いなく正しく捕らえているのでしょうか?
この点については、大丈夫です。
試しに、クラス名とハンドルを一緒にチェックするようプログラムで確認しました。
引き続き、ご指導の方お願いします。
No.1
- 回答日時:
>(2) FindWindowで、起動しているexeのハンドルを取得
>(3) 取得したハンドルに、SendMessageでexeを閉じるようにする(WM_CLOSEを使用)。
とりあえず、ここの部分のソースを。
あと、WM_CLOSEはSendじゃなくてPostMessageでPostするもんなんですけど。
どうしてSendMessageで送る人が多いのかなぁ?
>他にも、SendMessageの代わりにShowWindowを使ってみましたが同じくダメでした・・・(T-T)
ShowWindowは用途が違いますね。
この回答への補足
早速のご回答ありがとうございます。
Dim Rtn As Long
(2)Rtn = FindWindow("#32770", "")
今のForm.Hide
次のForm.Show
(3)Call SendMessage(wnRtn, WM_CLOSE, 0&, 0&)
プログラムの流れとしては、このようなカンジです。
引き続きよろしくお願いいたします!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) WPSスプレッドシートの起動オプションの設定は可能ですか? 1 2023/02/11 19:49
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Outlook(アウトルック) outlook メモリ不足 1 2022/05/31 10:16
- オープンソース Pythonのコードをexe化 1 2023/07/03 08:01
- Windows 10 Windows11の実行モジュールはどこにある 1 2022/05/31 07:33
- Windows 10 バッチファイルでのエクスプローラー終了 1 2022/05/30 14:32
- デスクトップパソコン 「自動修復でPCを修復できませんでした」と表示されPCが起動しないのですが対処法はありますか? 5 2022/05/13 09:16
- その他(Microsoft Office) windows10で作業を終了する際の「保存しますか はい いいえ」を表示させずに自動で保存する方法 6 2023/03/15 11:29
- 労働相談 合意済み仕様の商品納入後における仕様変更要求への対応について 5 2023/04/19 09:41
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows上のプログラム。「予め...
-
VBで実行中のEXEファイルの情報...
-
Process.Startで起動したアプリ...
-
VBSで起動したアプリが前面表示...
-
アウトルックが起動しているか...
-
exeファイルを実行するとすぐに...
-
PHPを通信させずにAndroidで動...
-
vba アプリの起動確認でAutocad...
-
C言語で他のプログラムの起動...
-
VBからの作業フォルダ指定
-
VBSから別のVBS起動するとき変...
-
二重起動禁止にする理由とは
-
Microsoft Edgeが起動しない
-
VisualBasic2008でWordを起動す...
-
VBによる複数バージョンのEXCEL...
-
WinSCPで画像のように puttyを...
-
EXCEL VBAから他アプリケーショ...
-
64bitで作ったEXEを32bitで起動...
-
VBAでOutlookを終了させたい Ex...
-
QueryPerformanceCounter の使...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アウトルックが起動しているか...
-
VBAでOutlookを終了させたい Ex...
-
VBで実行中のEXEファイルの情報...
-
Process.Startで起動したアプリ...
-
VBSから別のVBS起動するとき変...
-
Windows上のプログラム。「予め...
-
EXCEL VBAから他アプリケーショ...
-
VBSで起動したアプリが前面表示...
-
分かる人は簡単なのだろうが、v...
-
別アプリの起動、終了について
-
VBAでSeleniumからChromeを起動...
-
ACCESS VBAで別のACCESS(mdb)を...
-
VB6で呼び出し元の情報を取得す...
-
フォームの最前面が効かない
-
exeファイルを実行するとすぐに...
-
実行ファイルへのドラッグ&ド...
-
「FindWindow」、ウィンドウハ...
-
MSDOS(バッチファイル)でプロセ...
-
C# 他のアプリケーションを優先...
-
QueryPerformanceCounter の使...
おすすめ情報