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

첫째, 당신은 여기에서 IShellFolder::EnumObjects

를 사용 SHGetFolderLocation는 .. 다음,이 폴더의 내용을 열거 사용하여 바탕 화면 폴더의 위치를 ​​얻을 필요가, 하늘이 한계입니다. Windows 쉘과 상호 작용하는 정보의 톤은 here.

재미있게 보내세요!

업데이트 :

빠른 google search 당신이 원하는 것을 정확히 할 것이 샘플을집니다.

+0

시원하게 들립니다. 하지만 pls 내게 샘플을 줘? 나는 그 정보를 얻기 위해 일부 ppl ReadProcessMemory를 사용합니다. 맞습니까? – user602352

+0

IShellFolder COM 작업은 모두 진행 중이며 원격 프로세스에서 읽는 경우 ReadProcessMemory 만 필요하며이 컨텍스트에서는 explorer.exe와의 일종의 추악한 해킹 상호 작용을 나타냅니다 (데스크톱의 특정 레이아웃과 그 자식 윈도우는 문서화되어 있지 않으며 지난 수년 동안 심지어 설정 (액티브 데스크톱 등)에 따라 동일한 시스템에서 변경되었습니다. – Anders

+0

ReadProcessMemory()는 이에 대한 올바른 접근 방법이 아닙니다. 원하는대로 할 수있는 샘플 코드가 포함 된 원래 응답에 대한 링크를 추가했습니다. – Bukes

관련 문제