tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: 他アプリのグリッド情報の取得
投稿日: 2011/02/04(Fri) 13:16
投稿者魔界の仮面弁士
> Spy++でグリッドのクラス名を確認すると:
> AfxOleControl42
> となっていたので、何のコントロールなのか探してみたら、
> vsFlexArrayのコントロールで同様のクラス名でした。
Visual C++ 4.0〜6.0 あたりで OCX を作った場合、
それが MFC のダイアログリソースだと、特にクラス名を指定しなければ
 AfxOleControl42
 AfxOleControl42d
といった名前が付くようになっていたかと思います。


また、プロセス間でのデータ交換と言っても、その方法は多岐にわたります。
中には通信には向かない物や、VB6 からの利用が不可能な物もありますが、
思いつくところでは:

DDE、オートメーション、DCOM、パイプ、クリップボード、WM_COPYDATA、
メールスロット、アクセシブル オブジェクト(MSAA)、ソケット、.NET Remoting、
ファイルマッピング、ドラッグアンドドロップ、データベース、レジストリ、
コマンドライン引数指定でのアプリ起動などなど。

なお、vsFlexArray だとしたら、外部からの操作は無理だと思います。
SendMessage で操作できるようにはなっていませんし、
アクセシブル オブジェクトが実装されている様子もありませんでしたから。

どうにかして、コントロールのインスタンスを取得できれば、そこから
TextMatrix メソッドを呼び出せるかも知れませんが、それも難しいでしょうね。



> 他アプリ内のグリッド情報を取得する、VB6アプリを作成しようとしてます。
「他アプリ」側の開発者と打ち合わせることは可能なのでしょうか?

SendMessage を使うにしても
 RichTextBox なら EM_GETTEXTEX メッセージ
 ListView    なら LVM_GETITEM  メッセージ
といったように、それぞれのコントロールに応じた操作手法が必要になりますから
相手のことを正しく知らないと通信は難しいと思いますよ。

しかも別プロセスが相手というなら、取得バッファのポインタは
共有メモリとして確保する必要があるといった制約も生じます。
http://home.netyou.jp/cc/susumu/shrmem.html

# 16bit 時代からある一部のメッセージでは、別プロセスであっても
# 共有メモリを使わなくて済むケースがありますが、それは特例ということで。


> しかしグリッド情報の取得ができなく困っています。
OS 標準のコントロールであれば、Microsoft が用意した API / Windows メッセージで
ある程度は操作が可能です。ですが、独自実装またはサードパーティ製品だったりすると
そもそも不可能か、あるいは取得手段が非公開という可能性が高いです。
(通常は、自アプリ以外からの操作を許容しないように作られる事が多いはず)

たとえば `仮` に『VB6 の Line メソッドと Print メソッドを駆使して作った表ソフト』が
あったとします。この場合、別アプリからグリッド情報を取得することができるでしょうか?
恐らくは無理のはずです。そのグリッドの情報を得るための手段を、そのアプリの製造者に
実装しておいてもらえば可能ですが、そうでなければ、画面イメージを画像解析して
文字列データを推測するのが関の山でしょう。

要は、グリッド側(またはそれを使っているアプリ側)に、グリッド情報を得るための機能が
実装されていなければ通信は無理という事です。たとえ実装されていたとしても、そこに
どのような通信方法が採用されているか分からなければコードを書くことはできない、
という事です。


> どなたかご教授よろしくお願い致します。
http://www.tt.rim.or.jp/~rudyard/torii009.html

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。