2011-02-03 4 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

здесь, небо это предел. Тонны информации о взаимодействии с оболочкой окон here.

Удачи!

Update:

Быстрая google search получается этот образец, который, кажется, делать именно то, что вы хотите.

+0

Звучит круто. Но не могли бы вы дать мне образец ??? Я узнаю, что некоторые ppl используют ReadProcessMemory для получения этой информации. Правильно ли это? – user602352

+0

Все содержимое COM-файла IShellFolder работает только с ReadProcessMemory, если вы читаете из удаленного процесса, и в этом контексте это указывает на какое-то уродливое и хакерское взаимодействие с explorer.exe (конкретный макет рабочего стола и его дочерний элемент окна не документированы и меняются с годами и даже на одной и той же системе в зависимости от настроек (активный рабочий стол и т. д.). – Anders

+0

ReadProcessMemory() - это не правильный подход к этому. Я добавил ссылку на мой первоначальный ответ, в котором содержится пример кода, который, как представляется, делает то, что вы хотите. – Bukes

Смежные вопросы