2011-01-31 17 views
0

我完全知道如果我嘗試獲取另一個應用程序列表視圖項的緩衝區,我需要解決內存空間邊界所以我在做什麼是鉤哪個返回好了,沒有錯誤,成功則ListView_GetItem()宏和LV_GETITEMTEXT返回空STRING,而獲得另一個APP列表視圖項

enter code here 
LVITEM lvi; 
lvi.cchTextMax = 552; 
lvi.mask = LVIF_TEXT; 

_tfreopen(path,_T("w"),stdout); 

for (int nItem = 0; nItem < nMaxItems; nItem++) { 

    // Get the name and position of a ListView item. 
    lvi.iSubItem = 0; 
    lvi.iItem = nItem; 
    lvi.pszText = szName; 

    ListView_GetItem(hWndLV, &lvi); 
    wprintf(L"%s, ", szName); 
    wprintf(L"%s, ", lvi.pszText); 
    for (int subitem = 0; subitem < columns; subitem++) 
    { 

     lvi.iSubItem = subitem; 
     lvi.iItem = nItem; 
     lvi.pszText = szName; 

     ListView_GetItem(hWndLV, &lvi); 

     wprintf(L"%s, ", szName); 
     wprintf(L"%s, ", lvi.pszText); 

    } 
    wprintf(L"%s", "\n"); 

} 

wprintf(L"%s", GetLastError()); 
fclose (stdout); 

與GetLastError函數沒有錯誤,這完美的作品上的任何其他列表視圖我嘗試過,除了這個程序,是有可能仍然得到項目文本不知何故?

+0

你能給我們提供關於這個不起作用的應用程序的更多信息嗎?另外,你的問題的第一句話並沒有意義。 – 2011-02-01 01:35:00

+0

@Cody第一句反映了LVM_GETITEMTEXT傳遞一個指向LVITEM的指針,而這個指針並不跨越進程邊界。所以你必須用WriteProcessMemory/ReadProcessMemory做一些技巧才能使它工作。請參閱http://www.codeproject.com/KB/threads/int64_memsteal.aspx – 2011-02-01 13:53:54

+0

@Cody我只給了你C#答案的最後一票 - 你應該得到比所有努力都多的單選票! – 2011-02-01 13:57:10

回答

1

也許它是一個所有者繪製的listview(LVS_OWNERDRAWFIXED)?如果是這種情況,就不可能在沒有專有知識的情況下獲取文本。

相關問題