我用"我的電腦"這個來舉例。
圖標位置,數字等都可以獲得,但是名字"我的電腦"遮四個字得不到. HWND hDeskTopWnd = ::GetDesktopWindow();
HWND hChildWnd = ::FindWindowEx(hDeskTopWnd, NULL, "Progman", "Program Manager");
hChildWnd = ::FindWindowEx(hChildWnd, NULL, "SHELLDLL_DefView", "");
hChildWnd = ::FindWindowEx(hChildWnd, NULL, "SysListView32", "FolderView"); //取explorer.exe句柄.注意OpenProcess參數
DWORD   dwProcessId;   
GetWindowThreadProcessId(hChildWnd, &dwProcessId);   
HANDLE   hProcess = OpenProcess(PROCESS_VM_READ|PROCESS_VM_OPERATION, FALSE, dwProcessId);

int count = ListView_GetItemCount(hChildWnd); //獲得多少個圖標 //在explorer.exe空間內分配內存
PVOID   pv = VirtualAllocEx(hProcess, NULL, sizeof(POINT), MEM_COMMIT, PAGE_READWRITE);    //給桌面ListView窗口發一LVM_GETITEMPOSITION取"我的電腦"坐標
ListView_GetItemPosition(hChildWnd, 1, pv); //把由 LVM_GETITEMPOSITION 獲得的坐標數據复制到 pt 結構
POINT   pt;   
ReadProcessMemory(hProcess, pv, &pt, sizeof(POINT), NULL);    //下面獲取名字
LVITEM lvitem, *plvitem;
char ItemBuf[512],*pItem;
plvitem=(LVITEM*)VirtualAllocEx(hProcess, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE);
pItem=(char*)VirtualAllocEx(hProcess, NULL, 512, MEM_COMMIT, PAGE_READWRITE);
if ((!plvitem)||(!pItem))
AfxMessageBox("無法分配內存!");
else
{
lvitem.cchTextMax=512;
lvitem.iSubItem=0;
lvitem.pszText=pItem;
WriteProcessMemory(hProcess, plvitem, &lvitem, sizeof(LVITEM), NULL);
for (int iItem=0; iItem<count; iItem++)
{
lvitem.iItem = iItem;
::SendMessage(hChildWnd, LVM_GETITEMTEXT, (WPARAM)iItem, (LPARAM)plvitem);
BOOL bf = ReadProcessMemory(hProcess, pItem, ItemBuf, 512, NULL);
}
} //釋放內存, 句柄
VirtualFreeEx(hProcess, plvitem, 0, MEM_RELEASE);
VirtualFreeEx(hProcess, pItem, 0, MEM_RELEASE);
VirtualFreeEx(hProcess, pv, 0, MEM_RELEASE);   
CloseHandle(hProcess);