- 締切済み
Accessから既存VBexeファイル中のある画面を表示させたい
VB6.0のexeファイルが起動しており、そちらのボタンを押すと、Access単体で作ったシステムを表示させ、 本体のVBのexeファイルをハイドなりで隠して使いたいと思っています。 こちらのやり方はなんとなく分かるのですが、逆に、 Accessを終了させるときに元のVBの呼び出した画面を表示させなくてはなりません。 これはタイミング的にAccessの仕事だと思うのですが、 VBAで可能でしょうか? それとも、VBのほうでできますか? すみませんが、教えてください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- TAK_999
- ベストアンサー率43% (42/96)
非シグナル状態とは、動作している状態のことです。「シグナル」とはプロ セスに対する停止命令ですので、シグナル状態とは「終了しようとしている 状態」と思ってください。 戻り値でWAIT_TIMEOUTが帰ってくるのは、指定の時間が過ぎてもまだプロセ スが動作している場合です。WAIT_OBJECT_0が帰ってくると、プロセスが終了 状態になったことを示します。 通常、第2引数のタイムアウト時間にINFINITEを指定しますが、これを指定す ると、関数から制御が帰ってこないので、VBのイベントが取れません。その ため、タイムアウト時間に1000(1秒)くらいの値を設定し、呼び出しを繰 り返します。(呼び出しの合間にDoEventsすればVBのイベントが取れます。) Access側から終了したことを通知したいのであれば、DDEによる通信を行う意 外には思いつきません。DDEとはプロセス間の通信方法です。送信側が「終了 するよ!」といったメッセージを送信すると、VB側ではこれがイベントとし て発生し、受信できます。 DDEも使ったことはありますが、「面倒くさい」という記憶だけが残っています.. どちらにしてもVB側のコーディングは必要になります
- TAK_999
- ベストアンサー率43% (42/96)
API関数を使えば、VB側から制御可能です。 まず、Accessを起動するために「CreateProcess」を使います。Shellでも 起動はできますが、管理用のハンドルを取得しなければいけないのでこちら を使用します。 次に「WaitForSingleObject」で起動したタスク(Access)を監視します。 これを使えばAccessが完了したことを検知できます。また、管理用のハンド ルが分かっているので、VB側からAccessを強制終了させることもできます。 下記URLにWaitForSingleObjectの説明があります。
補足
回答ありがとうございます。 こちらの事情を補足しますと、Accessのほうは私が今から作るのですが、 VB6.0のほうは別の会社の方が作っていて、そちらに お邪魔する形になります。 できればAccessで・・・とも思うのですが。 参照URLを見てまいりました。 「非シグナル状態」というのは、終了させた時という認識でよろしいでしょうか? ある一定の時間、Accessが動いていない場合という判定などは、この関数で分かるのでしょうか? すみませんが、よろしくお願いいたします。