
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
VB5が起動しない
-
jspのエラーが修正できません。
-
量子化学計算ソフト GAMESS の...
-
GUIアプリをコマンドラインで使...
-
LabVIEWでEXCELファイルを操作...
-
エラー この変数は宣言されて...
-
Eclipseで、プロジェクト名のと...
-
SVFの設定について:クラスパス...
-
この <windows.h> はどこに在る...
-
「ワークスペースをビルド中」...
-
『ClassNotFoundException: org...
-
eclipseでのsvn認証エラー回避方法
-
javax.servlet.ServletExceptio...
-
classファイルについて
-
エラー:org.springframeworkが...
-
JSPのクラスをコンパイルできな...
-
Javascriptの値をJava(JSP)へ渡...
-
Eclipse(JAVA)のデバッグで他...
-
JAR内のクラス一覧と、メソッド...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
html上で、バッチやexeファイル...
-
LabVIEWでEXCELファイルを操作...
-
別のAccessファイルのフォーム...
-
VBA Application visibleの...
-
system.mdwを見つけることが出...
-
Access VBAよりシート名を取得...
-
VBAで作成したマクロをデスクト...
-
GUIアプリをコマンドラインで使...
-
エラー この変数は宣言されて...
-
*.asp の拡張子名がついたht...
-
HTMLファイルからexeファイルを...
-
jspのエラーが修正できません。
-
BIOSの更新
-
ホームページで,midのリンクを...
-
ASPからJavaの起動
-
EXE間で同期をとりながらデータ...
-
VB6.0 Shellによる終了監視に...
-
C# Font情報を保存したい
-
量子化学計算ソフト GAMESS の...
-
複数のパソコン間のDir関数につ...
おすすめ情報