MFC取得桌面圖標信息,名稱與座標

桌面信息是跟explorer.exe息息相關的,我們感興趣的信息便可以在裏面找到。

獲取它的句柄後,我們可以發送一系列的消息,將我們所感興趣的信息列舉下來,一系列的初始化代碼:

if(((hWnd = FindWindowEx(NULL, NULL, “Progman”, NULL)) == NULL) ||
((hWnd = FindWindowEx(hWnd, NULL, “SHELLDLL_DefView”, NULL)) == NULL) ||
((hWnd = FindWindowEx(hWnd, NULL, “SysListView32″, NULL)) == NULL))
{
MessageBox(“Could not get desktop window.”);
}

這段代碼不難理解,這便是要尋找桌面窗口的句柄。

接下來代碼:

GetWindowThreadProcessId(hWnd, &dwPID);
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
pData = VirtualAllocEx(hProcess, NULL, ALLOC_SIZE, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
pString = VirtualAllocEx(hProcess, NULL, ALLOC_SIZE, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
pPt = VirtualAllocEx(hProcess, NULL, ALLOC_SIZE, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);

接着向初始化好的內存中寫入:

WriteProcessMemory(hProcess, pData, &lvi, sizeof(LVITEM), &BytesWritten);

接下來便是發送消息吧。

得到桌面圖標個數:

::SendMessage(hWnd, LVM_GETITEMCOUNT, (WPARAM)0, (LPARAM)0);

返回值便是一個int類型值。

獲取相應圖標名稱:

::SendMessage(hWnd, LVM_GETITEMTEXT, (WPARAM)count, (LPARAM)pData);
ReadProcessMemory(hProcess, pString, szText, ALLOC_SIZE, &BytesRead);

count爲相應第幾個圖標,szText中則爲存貯的信息。

獲取相應圖標座標:

POINT pt;
::SendMessage(hWnd,LVM_GETITEMPOSITION,(WPARAM)count,(LPARAM)pPt);
fResult = ReadProcessMemory(hProcess, pPt, &pt, sizeof(POINT), &BytesRead);

pt即爲所得。

效果如圖:


原文鏈接:http://www.limou.net/?p=780


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章