//获取系统桌面的句柄
HWND hWndLV = ::GetTopWindow(::GetTopWindow(::FindWindow("ProgMan", NULL)));
//保存桌面的进程ID
DWORD dwProcessId;
GetWindowThreadProcessId(hWndLV, &dwProcessId);
//打开桌面进程
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
char item[512];
//在桌面进程申请可读写的内存
LVITEM *_lvi=(LVITEM*)VirtualAllocEx(hProcess, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE);
char *_item=(char*)VirtualAllocEx(hProcess, NULL, 512, MEM_COMMIT, PAGE_READWRITE);
char *_subitem=(char*)VirtualAllocEx(hProcess, NULL, 512, MEM_COMMIT, PAGE_READWRITE);
LVITEM lvi;
lvi.cchTextMax = 512;
lvi.iSubItem = 0;
lvi.pszText=_item;
//保存选中的图标的名称
list<CString> m_lItemName;
//获取桌面图标的数量
int ItemCount = ListView_GetItemCount(hWndLV);
//遍历桌面图标
for(int i = 0; i <= ItemCount; i++)
{
//判断图标的是否为选中状态
if(LVIS_SELECTED == ListView_GetItemState(hWndLV, i, LVIS_SELECTED))
{
//往进程写入内存
WriteProcessMemory(hProcess, _lvi, &lvi, sizeof(LVITEM), NULL);
//获取桌面图标的名称
::SendMessage(hWndLV, LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)_lvi);
//读取桌面图标的名称
ReadProcessMemory(hProcess, _item, item, 512, NULL);m_lItemName.push_back(item);
}
}