Windows2000上でVB6.0を使用してプログラミングをしています。
2つのEXE間で同期をとりながらデーターの受け渡しをしたいのですが
どのようにすれば良いのか方法が分かりません。
具体的には、AというEXEからBというデーター検索用のEXEを起動して、
Bの検索結果をAに返したいのですが...
AとBは同期をとっていたいので、
Bが起動している間はAの処理は止めておきたいです。
どなたか良い方法をご存知でないでしょうか?
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (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リンク」を使った方法、
どちらの方法でプログラムを作成するか正直迷ってます。
どちらもサンプルプログラムを作成して試してみましたが、
どちらの方がより一般的なプログラムに仕上がると思いますか?
専門家としての意見を聞かせて頂けるとありがたいのですが...
お忙しいとは思いますが時間があったら御意見宜しくお願いします。

補足日時:2001/06/07 17:31
    • good
    • 0

2つのExeは、標準のExeじゃないとダメなんですか?



1.標準Exe同士
 標準のExe間の通信だと、「DDEリンク」で、
 送信/受信が行えますよ。
 テキストやラベルで、結果を受取ることができます。
 (詳しくは、HELPで調べてください。ごめんね)

2.標準ExeからDLLやActiveX.Exeを使用する 
 検索するプログラムをDLLやActiveX.Exeにすると
 メソッドやプロパティーとして結果を受取れます。

 Exeを起動マシンに置いて、使用するのであれば
 DLLを使用するの良いですよ。


検索している間は、起動元の処理をさせないのであれば、DLLを使用してモーダル表示にすると大丈夫だと思います。標準Exe同士でもできないことはないですが、
いろいろな所に処理中の記述が必要となるでしょう。
    • good
    • 0
この回答へのお礼

amaniaさん、ありがごうございました。

「DDEリンク」でデーターの受け渡しが出来るんですね。
今まで言葉だけは聞いたことあったんですけど、
どんな場合に使えば良いのかイマイチ分からなくて...
早速「DDEリンク」を使ってサンプルプログラム作ってみました。
取り敢えず良い感じです。

「DLL」や「ActiveX.Exe」は自分がまだ全く理解できてないので、
今回は様子を見たいと思います。
時間があったら今後試してみたいとは思ってます。
多分DLLやActiveX.Exeの方が、
プログラム的にスマートにまとまるとは思うんですけどね(笑)

本当に参考になりました。ありがとうです。
また何か分からないことがあったら宜しくお願いします。

お礼日時:2001/06/07 17:28

こんにちは、honiyonです。


 トランシーバーで交信する二人をイメージしてみてはいかがでしょう?

 AさんからBさんに用件を伝え、Aさんが「どうぞ」と言うまでBさんはずっと「聞く」の状態です。

 検索用EXEから、検索結果が返されるか、「動け!」と情報がくるまで、待機していれば良いのではないでしょうか? 
例えば、検索用EXEから通信があったら Flag = TRUE とするようにしておいて、
  while not Flag do doEvents

 としてみるとか。

 参考になれば幸いです(..
#VB暫く触ってないもので、命令や構文おかしかったらゴメンナサイ(^^;
    • good
    • 0
この回答へのお礼

アドバイスありがとうございました。
検索用EXEからの通信をどのように受け取ってFlag=TRUEにしたら良いのか、
その辺をもう少し詳しくアドバイス頂けると嬉しかったです。
何かあったらまたアドバイスお願い致します。

お礼日時:2001/06/07 16:57

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が途中で強制終了した場合には、有効な手段だと思われます。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございました。
EXE同士で同期をとったりデーターの受け渡しをするのに、
ファイルを経由するなんてやり方があったんですね。
思いつきもしなかったので、とても参考になりました。
他の回答も参考にして作成してみたいと思います。
ありがとうございました。

お礼日時:2001/06/07 16:45

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qケニアのお土産が足りません。新宿~恵比寿間でどこかケニア(アフリカ)グ

ケニアのお土産が足りません。新宿~恵比寿間でどこかケニア(アフリカ)グッズ売っているお店はありませんでしょうか。
渡す相手とは今晩会う予定なので今日買わないとマズイです。急で申し訳ありませんがご存知の方、どうかご回答を!

Aベストアンサー

次善策としては、
乗り継ぎ空港(どこか知りませんが・・・・・)の土産物店で
売っていそうなチョコレート菓子などを、輸入菓子を売っているお店で買うとか。
ありがちだけど結構美味しいチョコレートがありますよね。
トリュフみたいなのとか。貝殻のもよくある。

パッケージには気をつけましょうね。
MiniPLAとか入ってたらますいので。あと裏側に張ってあるラベル。
たまに自分で食べようと思って買うと「ああ、輸入品って日本語ラベル貼ってあるんだなー」と思うので・・・・。

あとは現地での土産話をして差し上げたらいいのではv

QVB.NET(ASP.NET)でページAからページBに新しいWindowで飛んだ後ページBにページAのDataGrid情報をもっていく方法

VB.NET(ASP.NET)のWebアプリケーションを
VB.NET2003で開発しているのですが
ページAに表示しているDataGridを新しいWindowで表示したページBのDataGridに表示させたいんです。
Session情報に入れようと思いましたが入らない・・
どうしたらよいでしょうか?

Aベストアンサー

お世話になります。

各画面で全く同じものを表示するのなら、
ユーザコントロールか、Web カスタムコントロールにしてしまうのが効率がよいと思います。
それで、その上で DataSource に使っている
DataSet やら DataTable やらを Session で渡すとか。

> Session情報に入れようと思いましたが入らない・・
これは具体的にどうして入らないのでしょうか。

Q山手線の新橋~品川経由~恵比寿間で

山手線の新橋~(品川経由)~恵比寿間(山手線の南側の区間)にある
・大きめの書店(五反田のブックオフは大きいと思いましたが、新刊書店は?)
・大きめの文具店(銀座伊東屋、有楽町ロフト/無印ほどじゃなくても良いのですが)
・大きめの100均ショップ
・ホームセンター
・大きめのドラッグストア(新橋のヤマダ電機より広いフロアの所はないのでしょうか)
・大きめの安売りスーパー(ハナマサとイオンはみつけましたが、他にあれば)
を教えて下さい。(全部でなくても結構です。)

Aベストアンサー

書店ですと、五反田界隈こちらで。

http://maps.google.co.jp/maps?hl=ja&rlz=1T4RNRN_jaJP429JP429&um=1&ie=UTF-8&q=%E6%9B%B8%E5%BA%97%E3%80%80%E4%BA%94%E5%8F%8D%E7%94%B0&fb=1&gl=jp&hq=%E6%9B%B8%E5%BA%97&hnear=0x60188afb6cb8284b:0x4a2d025de6054e64,%E6%9D%B1%E4%BA%AC%E9%83%BD+%E4%BA%94%E5%8F%8D%E7%94%B0%E9%A7%85&sa=X&ei=kEIvUcDmJoL3mAXhuYDoAQ&ved=0CMoBEMgT

Q1フォルダに「A.xls」、「B.xls」、「C.xls」・・・とある

1フォルダに「A.xls」、「B.xls」、「C.xls」・・・とある場合、
すべてのファイルに一斉にA1セルに「a」という文字を反映させる場合の
VBAプログラムを教えていただけますでしょうか?
よろしくお願いいたします。

Aベストアンサー

フォルダ名を変更してから試してね
4行目の
mPath = "C:\tmp\"
「aaa」なら
mPath = "C:\aaa\"
に変更


Sub test()
Dim mPath As String
Dim nf As String
mPath = "C:\tmp\"
nf = Dir(mPath & ".xls")
Do While nf <> ""
Workbooks.Open Filename:=mPath & nf
Workbooks(nf).ActiveSheet.Range("a1").Value = "a"
Workbooks(nf).Close SaveChanges:=False
nf = Dir()
Loop
End Sub

簡単なコードにしてあるので、分らない所はヘルプで調べてね
参考まで

Q恵比寿~藤沢間のタクシー料金

タイトルの通りです。

幾ら位になりますか?

ルートは第三京浜、横浜新道、1号線で、高速料金は無視しての
料金で結構です。

大体の距離からの理論値(理論的な料金)でも結構ですし、
実際にこのルートに乗ってい支払いした方が居れば、尚結構。

宜しくお願いします。

Aベストアンサー

#2,#3で回答された方のほうが詳しそうですが、参考程度ですが、回答しておきますね。

わたしは以前の仕事の関係で、夜間辻堂まで帰ることが多々ありました。

東京や日本橋等~辻堂(首都高→横羽線→横浜新道→1号線)
○時間:1時間弱(早い時は50分位)
○料金:合計2万円強(大体20000~25000円)

大崎や五反田~辻堂(第三京浜→横浜新道→1号線)
○時間:1時間弱(1時間位)
○料金:合計2万円弱(大体18000~23000円)

ちょっと第三京浜経由で帰ることは少なかったので、正確にはお答えできないかもしれません。
しかも昼間でないため時間はまったくわからないと言ったところです。
う~ん昼間は混みそうですね・・・

QブックAシートAにブックBシートBをコピーしたい

VB.net VB.2008 にてプログラムしています。

ブックAのシートAにブックBのシートBをコピーするには、
どうしたら良いでしょうか?

ブックAシートAには他のシートへの参照が入っています。
ブックBシートBの数値を入れたら、ブックA内の他シートに参照された数値が行き渡るように
したいのですが、行き詰ってます。


 Worksheet.Copy()


だと、Before,Afterの設定になり、そのページズバリにコピーができません。

お知恵をお貸しください。
お願いします。

Aベストアンサー

実際に処理を実行するのは Excel なんだから、Excel VBA の
Copy メソッドのヘルプで確認すればいいじゃない???
Worksheet.Range.Copy(Destination) だよね。Cells で
シートの全セルを対象とした Range を取得するか、使用範囲
のみにするか、そのあたりはお好きなようにどうぞ。

Q「恵比寿」と「戎」、どっちが正しいの?

「十日えびす」の「えびす」は漢字で
「戎」が正しいのですか?
それとも「恵比寿」でしょうか?

七福神の恵比寿さんなので「十日恵比寿」だと思ってきたのですが
違うと言われました。

どちらが正しいのでしょうか?

Aベストアンサー

九州では十日恵比寿、関西は十日戎みたいです。

博多:十日恵比寿:十日恵比寿神社

西宮:十日戎:西宮神社(蛭子神系の戎神社の総本社)

大阪:十日戎:今宮戎神社

QShellコマンドで別のexeを起動するとフォーカスが別exeにいかない

2本のEXE(AとB)があって、

AからBを呼び出して、Bの終了ボタンを
押すとAに戻るようなプログラムがあります。

Bを最前面にして起動しているのですが、
Bにフォーカスがいってくれません。
(Aに残ったままになっている?)

ちなみにAもBもウィンドウスタイルは、
青いバーが出ている状態(動かせる状態)です。

Bが起動している間、Aはその後ろでまっている
ようなイメージです。

どうやったらフォーカスを渡すことが
できるでしょうか?

<条件>
Bのプログラムは修正することができません。
Aのプログラムは自由に修正できます。

どなたか教えて下さい。

Aベストアンサー

http://www.ops.dti.ne.jp/~allergy/vb/vbvba.html#exec

こちらを参考にしてみて下さい。

Q恵比寿のガーデンプレイスは何時まで夜景が見られますか。

外国人ですが今回東京の恵比寿にあるガーデンプレイスの夜の風景が奇麗だと聞きました。恵比寿のガーデンプレイスは何時まで夜景が見られますか。(電球が光ってるのなんじまでですか)そして恵比寿タワーの展望台は何時まで入場できますか。

Aベストアンサー

下記サイトを参考に。

展望スペース
http://machi.goo.ne.jp/snd/spotID_TO13011208/leisure/details.asp
東京都渋谷区恵比寿4-20 恵比寿ガーデンプレイスタワー38・39F

恵比寿ガーデンプレイス展望スペース恵比寿を代表する大型複合都市としておなじみの恵比寿ガーデンプレイス。高さ約160mのエレベータースペース
期間 通年
営業時間 11:30~23:00
休業日 2月第3日曜
入場料 無料




http://gardenplace.jp/restaurantcafe/compassrose.html?mv=cn&id=leadDetail
コンパスローズ(スカイラウンジ)
場所:ウェスティンホテル東京22F
営業時間:14:00~25:00
定休日:無休
座席数:60席

Q外部exeに対しての引数受け渡し

お世話になります。
2点ほどVB.netのコーディングに関して質問があります。

環境:VB2008
DB:SQLSEVER

A = アプリケーション1
B = アプリケーション2
複数の引数 = DB検索情報(key,テーブル名)&ヒットしたファイルが格納されているルートディレクトリ

●実装したい機能
Aから外部のB(exe)を呼び出し、Aから受け取った複数の引数を元にDBを検索しファイル名をヒットさせ、そのファイルを開く。

質問(1)
Aから外部のB(exe)を呼び出すときにAで取得した複数の引数をBに渡す方法はどうするのでしょうか?

質問(2)
受け取った引数を元にDBを検索し、ヒットしたファイルを開きたいのですが、その複数の引数を格納する構文はどういったものになるのでしょうか?

ネットで調べはしましたが、いまいちピンとくるものがなく質問した次第です。
最近VBを始めたもので、質問をする上で情報が欠如しているかもしれませんが、ご回答頂けると幸いです。
よろしくお願いします。

Aベストアンサー

> 受け取った引数が("SomeEXE.exe", "hoge.txt fuga.txt piyo.txt")となっていますが、
> この"hoge.txt fuga.txt piyo.txt"をxとyといった変数に別々に格納したいのですが・・・。
> xにhoge.txt fuga.txt
> yにpiyo.txt
> といった感じです。

 Process.Start("SomeEXE.exe", "hoge.txt fuga.txt piyo.txt")
としたとき、Mainメソッドに渡される引数は
 CmdArgs(0) → "hoge.txt"
 CmdArgs(1) → "fuga.txt"
 CmdArgs(2) → "piyo.txt"
になります。(スペース区切り)

 Process.Start("SomeEXE.exe", """hoge.txt fuga.txt"" piyo.txt") //←ひとまとめにしたい引数はダブルクォーテーション(")で囲う
とすると、Mainメソッドに渡される引数は
 CmdArgs(0) → "hoge.txt fuga.txt"
 CmdArgs(1) → "piyo.txt"
になります。

> 受け取った引数が("SomeEXE.exe", "hoge.txt fuga.txt piyo.txt")となっていますが、
> この"hoge.txt fuga.txt piyo.txt"をxとyといった変数に別々に格納したいのですが・・・。
> xにhoge.txt fuga.txt
> yにpiyo.txt
> といった感じです。

 Process.Start("SomeEXE.exe", "hoge.txt fuga.txt piyo.txt")
としたとき、Mainメソッドに渡される引数は
 CmdArgs(0) → "hoge.txt"
 CmdArgs(1) → "fuga.txt"
 CmdArgs(2) → "piyo.txt"
になります。(スペース区切り)

 Process.Start("SomeEXE.exe", """hog...続きを読む


人気Q&Aランキング