2010-12-31 21 views
4

私はエクスプローラのリストビューの内容を取得し、項目テキストなどを取得するためにアプリケーションを作成しようとしていますが、ここから問題があります...外部アプリケーションのリストビューのHWNDを取得するにはどうすればよいですか? Windows APIでC++を使用している

Windowsエクスプローラフォルダspy ++)をlistviewでテストするために、私はランダムなフォルダを使用します。

これは、ウィンドウのキャプションが "SysListView32"クラスの "FolderView"であり、このリストビューがネストされているトップレベルウィンドウが "参照"と呼ばれることを示しています。これはWindowsエクスプローラフォルダのタイトルでもあり、あります。

だから私は何をすべきか..です

HWND hWndLV = FindWindow(NULL, TEXT("reference")); // first i get hwnd of the main window, this is where listview window is also nested according to spy++, thats why i do this first. 

HWND child = FindWindowEx(hWndLV, NULL,NULL,TEXT("FolderView")); // trying to get hwnd of the listview here but it fails, same happens if i also put the class name along as 

HWND child = FindWindowEx(hWndLV, NULL,TEXT("SysListView32"),TEXT("FolderView")); 

私も、デバッガVS失敗をテストするためにbool test = IsWindow(child);を使用していますが0x0000000000たびに示しので、私は十分な結果を読んでいます確信しています。

だから私は、人々のほとんどのために、このおそらく単純なことにこだわっています:((それはとにかく重要な場合)

PS iはvista64に

編集しています:この機能は私が検索した場合にのみ動作すること表示されます親ウィンドウの最初のネストされたレベルを探していますので、何か必要なのは、何らかの深い入れ子レベルの検索で処理する方法です。

また、すべてのhwnd親はそれにfindwindowexを使用しますが、ああ男の子は、私は5つのネストされたウィンドウがすべて同じ名前とのみであるポイントになるそれらの1つに私のリストビューが含まれています。

答えて

3

メインウィンドウ(たとえばFindWindowを使用)にハンドルがある場合は、EnumChildWindowsを使用してその子ウィンドウを列挙できます。

+0

EnumChildWindowsを使用してリストビューのハンドルを取得する方法を教えてください。これは本当に新しいです。 – Marko29

+2

@ Marko29ここで見つけることのできる例:http://blogs.msdn.com/b/oldnewthing/archive /2007/01/16/1478717.aspx – Vladimir

+0

これはどのように動作するのか一般的な考え方ですが、今私が困惑しているのは、トラフを列挙しながら必要なもの(listview)を取得する方法だけです。 – Marko29

関連する問題