1

我一直在尝试在外部列表视图上选择一个项目,但它似乎只适用于接受多个选定项目的列表视图:

HANDLE process=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, 0xC30); 

LVITEM lvi;

LVITEM* _lvi=(LVITEM*)VirtualAllocEx(process, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE); 

 lvi.state = LVIS_FOCUSED | LVIS_SELECTED;
 lvi.stateMask = LVIS_FOCUSED | LVIS_SELECTED;
 lvi.mask = LVIF_STATE;

 WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL); 
 int abc = ::SendMessage((HWND)0x00080D6A, LVM_SETITEMSTATE, (WPARAM)0, (LPARAM)_lvi); 
 VirtualFreeEx(process, _lvi, 0, MEM_RELEASE);
4

1 回答 1

1

您的代码看起来有效,并且应该可以工作,我已经在我自己的 GUI 应用程序本身内部对其进行了测试,所以问题可能在于您尝试从实际进程之外进行访问。我注意到您已经为 ListView 硬编码了 HWND。此外,我会小心您在发送消息后立即释放虚拟内存。请记住,发送的消息将被发布(假设 HWND 正确)到 ListView 消息泵。它可能不会立即得到处理,到时候,你很有可能已经释放了 LVITEM 的内存。在 GUI 内部尝试它,确保你可以正常工作,然后我建议回到这种方法并设置适当的调试点(在 GUI 内,如果这是其他人的,

于 2009-07-04T21:20:39.927 回答