WindowsNTや98でファイル検索をすると、検索結果として
名前、フォルダ名、サイズなどが一覧で表示されますが、
これらの一覧を取得する方法はありますか?
できれば1行目を読み取って、処理した後に2行目に移って、
という方法が理想です。
コマンドプロンプトからfindコマンドでテキストにリダイレクト
する方法などではなく、あくまでファイル検索の結果ウインドウから
取得したいです。
良い方法があれば、ご教授ください。
宜しくお願いいたします
ふつうは、FindFirstなどで自前のコードで取得すると思いますが、本当にExplorerの検索結果を取得する必要がありますか?
もしするなら、explorer.exeを検索し、「検索結果」という文字を含むウィンドウの、SysListView32からLISTVIEW_*系のAPIで取得できると思います。
>>あくまでファイル検索の結果ウインドウから取得したいです。
にこだわるならApiバリバリ呼ぶ事になりますよね?
ちなみにCommCtrlの中にLV系のMessageがあるので
解読すれば意外と楽にいけそうですよ。
かなりの力技っぽいですけどね・・・
私もFindFirst等で十分だと思います。
Halbow です。
>>あくまでファイル検索の結果ウインドウから取得したいです。
>にこだわるならApiバリバリ呼ぶ事になりますよね?
そうですね。ハンドルを取得してメッセージを送信して取得することに
なります。
>ちなみにCommCtrlの中にLV系のMessageがあるので
>解読すれば意外と楽にいけそうですよ。
function ListView_GetItemCount(hWnd: HWND): Integer;
と
function ListView_GetItem(hWnd: HWND; var pItem: TLVItem): Bool;
を使うんですが、後者の場合は、共有メモリを使わなくてはならないので非常に面倒です。
Win9X 系では、ファイルマッピングオブジェクト、NT 系では VirtualAllocEx()
を使わなくてはなりません。
返答ありがとうございます。
実は、ファイル検索の結果を表示するのと同じような
形式を持つ、別の(とてもマイナーな)アプリがあるのですが、
これの操作したいと思っていました。
(左端から、「行番号」、「ユーザ名」、「IP」と続き、行番号のみ選択可能。
1行目を読み出して、ユーザ名が一致したら、行番号を選択して、削除、など。)
ListView_GetItemCount,ListView_GetItemなど、
まだ始めたばかりの私には難しいですが、頑張って勉強します。
教えていただいてありがとうございました。
Halbow です。
>後者の場合は、共有メモリを使わなくてはならないので非常に面倒です。
>Win9X 系では、ファイルマッピングオブジェクト、NT 系では VirtualAllocEx()
>を使わなくてはなりません。
Cのコードですが、ここが説明・コードともにわかりやすいです。
共有メモリを利用するには
http://techtips.belution.com/ja/vc/0001/
近々、わたしのHPでも Delphi の例を示す予定です。
Halbow です。
解決済みですが、
> 近々、わたしのHPでも Delphi の例を示す予定です。
できました。
他のアプリのウィンドウ情報の取得 - 共有メモリ
http://halbow.cool.ne.jp/VCL08.html
>Halbow様
幸田です。
早速拝見させていただいています。
(まだ全部は見れていませんが・・・。)
先に回答いただいた後、いろいろ参考にしながら作成し、
検索ウィンドウの情報取得はできたのですが、
本来取得したかった別のリストビューで取得しようとすると
文字化けしたものしか取得できない状態です。
Halbow様のHPできちんと理解しながら作成し直すつもりです。
また質問させていただくこともあるかと思いますが、
その際は宜しくお願いいたします。
ツイート | ![]() |