No.4ベストアンサー
- 回答日時:
データの受け渡しはファイルで行うとして、同期をとるのは
OpenProcess、WaitForSingleObject、CloseHandle等の
APIを使用すれば可能です。
以下参考にして下さい。
****************************************************
Private Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" _
(ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long
Private Const SYNCHRONIZE = &H100000
Private Const INFINITE = &HFFFF
Private Sub Command1_Click()
Dim IDProcess As Long
Dim hProcess As Long
Dim ret As Long
IDProcess = Shell("calc.exe", vbNormalFocus)
hProcess = OpenProcess(SYNCHRONIZE, 1, IDProcess)
ret = WaitForSingleObject(hProcess, INFINITE)
ret = CloseHandle(hProcess)
MsgBox " 終了しました ", vbInformation
End Sub
この回答への補足
返答ありがとうございます。
同期をとるAPIがちゃんとあるんですね。
早速コードを参考にしてサンプルプログラムを作ってみました。
すごい!ちゃんと同期とってるっ!!
これこれっ!これがしたかったんです。
でも、やっぱりデーターの受け渡しはファイルで行うしかないんですかね?
他の回答で「DDEリンク」を使う意見も頂いたんですけど、
「API」を使った方法と「DDEリンク」を使った方法、
どちらの方法でプログラムを作成するか正直迷ってます。
どちらもサンプルプログラムを作成して試してみましたが、
どちらの方がより一般的なプログラムに仕上がると思いますか?
専門家としての意見を聞かせて頂けるとありがたいのですが...
お忙しいとは思いますが時間があったら御意見宜しくお願いします。
No.3
- 回答日時:
2つのExeは、標準のExeじゃないとダメなんですか?
1.標準Exe同士
標準のExe間の通信だと、「DDEリンク」で、
送信/受信が行えますよ。
テキストやラベルで、結果を受取ることができます。
(詳しくは、HELPで調べてください。ごめんね)
2.標準ExeからDLLやActiveX.Exeを使用する
検索するプログラムをDLLやActiveX.Exeにすると
メソッドやプロパティーとして結果を受取れます。
Exeを起動マシンに置いて、使用するのであれば
DLLを使用するの良いですよ。
検索している間は、起動元の処理をさせないのであれば、DLLを使用してモーダル表示にすると大丈夫だと思います。標準Exe同士でもできないことはないですが、
いろいろな所に処理中の記述が必要となるでしょう。
amaniaさん、ありがごうございました。
「DDEリンク」でデーターの受け渡しが出来るんですね。
今まで言葉だけは聞いたことあったんですけど、
どんな場合に使えば良いのかイマイチ分からなくて...
早速「DDEリンク」を使ってサンプルプログラム作ってみました。
取り敢えず良い感じです。
「DLL」や「ActiveX.Exe」は自分がまだ全く理解できてないので、
今回は様子を見たいと思います。
時間があったら今後試してみたいとは思ってます。
多分DLLやActiveX.Exeの方が、
プログラム的にスマートにまとまるとは思うんですけどね(笑)
本当に参考になりました。ありがとうです。
また何か分からないことがあったら宜しくお願いします。
No.2
- 回答日時:
こんにちは、honiyonです。
トランシーバーで交信する二人をイメージしてみてはいかがでしょう?
AさんからBさんに用件を伝え、Aさんが「どうぞ」と言うまでBさんはずっと「聞く」の状態です。
検索用EXEから、検索結果が返されるか、「動け!」と情報がくるまで、待機していれば良いのではないでしょうか?
例えば、検索用EXEから通信があったら Flag = TRUE とするようにしておいて、
while not Flag do doEvents
としてみるとか。
参考になれば幸いです(..
#VB暫く触ってないもので、命令や構文おかしかったらゴメンナサイ(^^;
アドバイスありがとうございました。
検索用EXEからの通信をどのように受け取ってFlag=TRUEにしたら良いのか、
その辺をもう少し詳しくアドバイス頂けると嬉しかったです。
何かあったらまたアドバイスお願い致します。
No.1
- 回答日時:
1番簡単なやり方は、テンポラリファイルを使用するのが簡単でしょう。
例えば...
1.A.EXEから、B.EXEを起動する時の引数で、A.EXEが生成したファイルを渡してあげます(拡張子を適当な物にして)
2.B.EXEが動作している最中は、このファイルをそのままにしておきます。それにより、A.EXEは、引数で渡したファイルが存在している最中は、B.EXEが起動しているので、処理を停止しています(タイマかなんかで調べる)。
3.B.EXEが動作終了したら、引数で渡されたファイルで拡張子を変えた物を作成して、その中に結果を入れる
4.B.EXEは結果を書込んだら、引数で渡されたファイルを削除する
5.A.EXEは、ファイルがなくなった事で、B.EXEが終了した事を認識するので、同ファイルの拡張子が違う物を読込んで結果処理を行う。
ってので実現出来ると思います。2番の所で、プロセスハンドルを調べるをつけ足すと、もっと処理が正確になりますね。特にB.EXEが途中で強制終了した場合には、有効な手段だと思われます。
アドバイスありがとうございました。
EXE同士で同期をとったりデーターの受け渡しをするのに、
ファイルを経由するなんてやり方があったんですね。
思いつきもしなかったので、とても参考になりました。
他の回答も参考にして作成してみたいと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 労働相談 合意済み仕様の商品納入後における仕様変更要求への対応について 5 2023/04/19 09:41
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Windows 10 Windows11の実行モジュールはどこにある 1 2022/05/31 07:33
- Outlook(アウトルック) 標準アカウントをOUTLOOKアプリに登録するとほかのアカウントのメールもこのアドレスに受信される 1 2023/02/03 20:34
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- その他(クラウドサービス・オンラインストレージ) iPadとWinPC間でファイルの共有と同期化の方法を教えてください。 2 2022/07/23 11:59
- Visual Basic(VBA) コマンドプロンプトでフォルダ内(デスクトップ)の複数PDFファイルの1ページ目だけを印刷したい 1 2022/09/11 23:33
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- WordPress(ワードプレス) [BuddyPress]試したいのですが! 3 2022/06/01 13:36
- オープンソース Pythonのコードをexe化 1 2023/07/03 08:01
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
VBA Application visibleの...
-
exeファイルが実行中かどうか、...
-
AccessのMDBファイルを自動で最...
-
EXE間で同期をとりながらデータ...
-
system.mdwを見つけることが出...
-
*.asp の拡張子名がついたht...
-
HTMLファイルを自動で起動...
-
Access VBAよりシート名を取得...
-
起動中の全てのアプリ名の取得...
-
VBAで作成したマクロをデスクト...
-
HTMLファイルからexeファイルを...
-
Eclipseで、プロジェクト名のと...
-
classファイルについて
-
Eclipse(JAVA)のデバッグで他...
-
split関数で区切り文字がない場合
-
Eclipseのアンインストールの仕方
-
JSPのクラスをコンパイルできな...
-
eclipseで1ファイルの警告を100...
-
vs codeはオフラインでも使用で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
VBA Application visibleの...
-
jspのエラーが修正できません。
-
Access VBAよりシート名を取得...
-
HTMLファイルからexeファイルを...
-
VBAで作成したマクロをデスクト...
-
*.asp の拡張子名がついたht...
-
別のAccessファイルのフォーム...
-
system.mdwを見つけることが出...
-
量子化学計算ソフト GAMESS の...
-
VB5が起動しない
-
エラー この変数は宣言されて...
-
RPA(PowerAutomate)の実装について
-
vb.netでフォルダをcab圧縮する...
-
exeファイルが実行中かどうか、...
-
VistaのIISで動作するASPのExce...
-
java 17 を環境変数まで設定...
-
VB6.0 Shellによる終了監視に...
-
GUIアプリをコマンドラインで使...
-
AccessのMDBファイルを自動で最...
おすすめ情報