以下是获取桌面图标位置的代码。希望能获取图标名,或通过图标名获取图标位置。没分,只能在这里说声谢谢了。HWND hDeskTop;
hDeskTop = ::FindWindow("progman", NULL);
hDeskTop = ::FindWindowEx(hDeskTop, 0, "shelldll_defview", NULL);
hDeskTop = ::FindWindowEx(hDeskTop, 0, "syslistview32", NULL);
/*取explorer.exe句柄.注意OpenProcess的参数 */
DWORD dwProcessId;
GetWindowThreadProcessId(hDeskTop, &dwProcessId);
HANDLE hProcess = OpenProcess(PROCESS_VM_READ | PROCESS_VM_OPERATION, false, dwProcessId); PVOID rc = VirtualAllocEx(hProcess, NULL, sizeof(RECT), MEM_COMMIT, PAGE_READWRITE);
int m_iconCount = ListView_GetItemCount(hDeskTop);
/*在explorer.exe空间内分配内存*/
PVOID pv =VirtualAllocEx(hProcess, NULL, sizeof(POINT), MEM_COMMIT, PAGE_READWRITE);
/*给桌面ListView窗口发一LVM_GETITEMPOSITION取"我的电脑"坐标*/
ListView_GetItemPosition(hDeskTop, 9, pv);
/*把由LVM_GETITEMPOSITION获得的坐标数据复制到pt结构*/
ReadProcessMemory(hProcess, pv, &pt, sizeof(POINT), NULL); /* 释放内存, 句柄 */
VirtualFreeEx(hProcess, pv, 0, MEM_RELEASE);
CloseHandle(hProcess);
hDeskTop = ::FindWindow("progman", NULL);
hDeskTop = ::FindWindowEx(hDeskTop, 0, "shelldll_defview", NULL);
hDeskTop = ::FindWindowEx(hDeskTop, 0, "syslistview32", NULL);
/*取explorer.exe句柄.注意OpenProcess的参数 */
DWORD dwProcessId;
GetWindowThreadProcessId(hDeskTop, &dwProcessId);
HANDLE hProcess = OpenProcess(PROCESS_VM_READ | PROCESS_VM_OPERATION, false, dwProcessId); PVOID rc = VirtualAllocEx(hProcess, NULL, sizeof(RECT), MEM_COMMIT, PAGE_READWRITE);
int m_iconCount = ListView_GetItemCount(hDeskTop);
/*在explorer.exe空间内分配内存*/
PVOID pv =VirtualAllocEx(hProcess, NULL, sizeof(POINT), MEM_COMMIT, PAGE_READWRITE);
/*给桌面ListView窗口发一LVM_GETITEMPOSITION取"我的电脑"坐标*/
ListView_GetItemPosition(hDeskTop, 9, pv);
/*把由LVM_GETITEMPOSITION获得的坐标数据复制到pt结构*/
ReadProcessMemory(hProcess, pv, &pt, sizeof(POINT), NULL); /* 释放内存, 句柄 */
VirtualFreeEx(hProcess, pv, 0, MEM_RELEASE);
CloseHandle(hProcess);
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货