我一直在尝试在外部列表视图中选择一个项目,但它似乎只适用于接受多个所选项目的列表视图:
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);
答案 0 :(得分:1)
您的代码看起来有效,并且应该有效,我已经在我自己的GUI应用程序本身内部进行了测试,因此问题可能在于您尝试从实际进程外部进行访问。我注意到你已经为ListView硬编码了HWND。另外,我会小心你发送消息后立即释放虚拟内存。请记住,发送的消息将被发布(假设HWND正确)到ListView消息泵。它可能不会立即处理,到时候,你已经释放了LVITEM的记忆。在GUI内部尝试它,确保你有这个工作,然后我建议回到这个方法并设置适当的调试点(在GUI中,如果这是其他人的,使用listView创建自己的简单对话框)确保正确接收消息,并确保内存有效。