2011-02-03 17 views
0

人。 私はデスクトップ上のアイコンの名前をC++で入手したいと思っています。そして、私は彼らのハンドルを得る方法を知っています:デスクトップ上のアイコンの名前を取得する方法

HWND hwnd = FindWindow("Progman","Program Manager"); 
    HWND hwndSHELLDLL_DefView = ::FindWindowEx(hwnd, NULL, "SHELLDLL_DefView", NULL); 
    HWND hwndSysListView32 = ::FindWindowEx(hwndSHELLDLL_DefView, NULL, "SysListView32", "FolderView"); 

次は何ですか?

+0

アイコンは単にフォルダ、ショートカット、または普通のファイルです... – Maxpm

+0

あなたはファイルシステムを使うことができます –

+0

フォルダとファイルに加えて、デスクトップには名前空間拡張も含まれています。たとえば、「ごみ箱」アイコンは、ユーザーのごみ箱のビューをマップする名前空間拡張です。私が下に投稿した答えは、このタイプのオブジェクトも返します。 – Bukes

答えて

5

まず、あなたはSHGetFolderLocationを使用して、デスクトップフォルダの場所を取得する必要があります...次に、あなたはここからIShellFolder::EnumObjects

を使用して、このフォルダの内容を列挙し、空は限界です。 Windowsシェルとのやり取りについての情報がたくさんありますhere

楽しくお楽しみください!

更新:

迅速google searchはあなたが望むものを正確に行うように見えるこのサンプルをアップになります。

+0

それはクールに聞こえる。しかし、あなたは私にサンプルをくれますか?私はその情報を得るためにいくつかのppl ReadProcessMemoryを使うことを知ります。それが正しいか? – user602352

+0

IShellFolderのCOMはすべてプロセス中です。リモートプロセスから読み込んでいる場合はReadProcessMemoryが必要です。このコンテキストでは、explorer.exeとのやりとりの面倒なやりとりを示します(デスクトップの特定のレイアウトとその子ウィンドウは文書化されておらず、設定に応じて同じシステム上でさえ何年も変わっています(アクティブデスクトップなど) – Anders

+0

ReadProcessMemory()はこれに対する正しいアプローチではありません。私はあなたが望むことをするように見えるいくつかのサンプルコードを含む私の元の答えへのリンクを追加しました。 – Bukes

関連する問題