要想获取桌面上图标的信息,就需要FindWindow这个API函数,获取到桌面的句柄:
hwnd= (HWND)::FindWindow("Progman", "Program Manager"); //获取系统桌面的句柄
hwnd= (HWND)::FindWindowEx(hwnd, NULL, "shelldll_defview", NULL);
desktophwnd = (HWND)::FindWindowEx(hwnd, NULL, "syslistview32", "FolderView");
然后查询桌面图标的数量:
int count = (int)SendMessage(desktophwnd, LVM_GETITEMCOUNT, (WPARAM)0, (LPARAM)0);
接下来,就是获取桌面进程id,根据id获取进程句柄。然后就是遍历获取桌面图标信息的输出:
LVITEMlvi, *_lvi;
char item[512];
char *_item;
unsigned long pid;
HANDLE process;
GetWindowThreadProcessId(desktophwnd, &pid);
process = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_QUERY_INFORMATION, FALSE, pid);
_lvi = (LVITEM*)VirtualAllocEx(process, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READW