2011-01-31 74 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)?如果是这种情况,就不可能在没有专有知识的情况下获取文本。

相关问题