[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/03/26(Sun) 00:11
投稿者名:EC
Eメール:
URL :
タイトル:
他のアプリケーションのリストビューからのテキスト取得
他のEXEのリストビューからテキストを取得するため、検索してようやく
「hhttp://vbforums.com/printthread.php?t=184384」までたどり着きましたが、GetListviewItemとい
う関数の因数でひっかかっています。

GetListviewItem(ByVal hWindow As Long, ByVal ProcessID As Long, ByVal pColumn As Long,
ByVal pRow As Long)

なのですが、hWindowはリストビューのハンドル、pColumnはリストビューの列、pRowはリストビュー
の行ではないかと検討はついたのですが、ProcessIDが理解できません。そもそもProcessIDというもの
が理解できないというのもあるのですが。

リストビューに対してProcessIDというものが存在するのでしょうか?存在するのであれば、APIなど
で取得することができるのでしょうか?

投稿時間:2006/03/26(Sun) 09:13
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re: 他のアプリケーションのリストビューからのテキスト取得
API関数のGetWindowThreadProcessIdなどについて調べてみてください。

投稿時間:2006/03/26(Sun) 22:45
投稿者名:EC
Eメール:
URL :
タイトル:
Re^2: 他のアプリケーションのリストビューからのテキスト取得
> API関数のGetWindowThreadProcessIdなどについて調べてみてください。

情報ありがとうございます。ProcessIDについて調べ、取得することはできたのですが、取得できたのは作成中のForm1.frm、Module1.bas、Project1.vbp、Project1.vbwが入ったフォルダです。

最初に述べておくべきでしたが、Becky!などの外部アプリケーションのリストビューからのテキスト取
得が目的です。現在のコードは

1 EnumWindows、EnumChildWindowsでウィンドウハンドル、ウィンドウテキストを取得する。
2 GetClassNameでクラス名を取得する。
3 GetWindowLongでコントロールIDを取得する。
4 SendMessageでリストビューの行数を取得する。
5 GetWindowThreadProcessIdでプロセスIDを取得する。
6 GetListviewItemでリストビューのテキストを取得する。

というものですが、前述のフォルダ、Windowsに付属の「ディスク デフラグ ツール」「Windows タスク マネージャー」に関しては取得できるのですが、Becky!以外の他のアプリケーションについては「"
"(空文字)」が取得されました。この現象についてお分かりになりますか?もしかして取得はできないのでしょうか?

開発環境はWinXP SP2、VB6.0 SP6です。

投稿時間:2006/03/27(Mon) 01:53
投稿者名:EC
Eメール:
URL :
タイトル:
追伸
リストビューのウィンドウスタイル、拡張ウィンドウスタイルを調べたところ、LVS_OWNERDATAとあったので仮想リストビューのようです。残念ながら、仮想リストビューからのテキスト取得のサンプルや情報が見つかりませんでした。

併せてご存知の方情報をいただけますでしょうか。

投稿時間:2006/03/27(Mon) 08:39
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re: 追伸
仮想リストビューだとデータの持ち方がわかりませんので、一般的には無理でしょう。

投稿時間:2006/03/27(Mon) 13:27
投稿者名:EC
Eメール:
URL :
タイトル:
Re^2: 追伸
> 仮想リストビューだとデータの持ち方がわかりませんので、一般的には無理でしょう。

そのようですね。できたとしても望むような取得はできないという同じような質問を見つけました。デ
バイスコンテキストを取得してと思ったのですが。

投稿時間:2006/04/02(Sun) 22:49
投稿者名:EC
Eメール:
URL :
タイトル:
Re^3: 追伸
> > 仮想リストビューだとデータの持ち方がわかりませんので、一般的には無理でしょう。

時間を空けてしまいました。申し訳ありません。この間に取得方法をいろいろな角度から考えてみまし
た。

他のアプリケーションのリストビューが送るWM_DRAWITEMなどのウィンドウメッセージにアイテムを描画
する位置情報があるのですが、その位置からテキストを取得するという方法なのですが、これを実現する
ような関数や、サンプルなどはあるのでしょうか?

投稿時間:2006/04/03(Mon) 12:03
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re: 追伸
# 改行は適切に。

> 他のアプリケーションのリストビューが送るWM_DRAWITEMなどのウィンドウメッセージに

WM_NOTIFYとNM_CUSTOMDRAWであって、WM_DRAWITEMは関係ありませんよね?

> アイテムを描画する位置情報があるのですが、その位置からテキストを取得するという
> 方法なのですが、これを実現するような関数や、サンプルなどはあるのでしょうか?

組み合わせれば可能でしょう。しかし、どれをどう組み合わせるのかが
わからないのならば、VB6ではやるべきではないでしょうね。

少なくとも、他のプロセスの情報に取ろうとする段階で、一般的なVB6の
使い方からは外れていますし。で、本質的には、仕様に問題があると
思いますよ。