我一直在尝试在外部列表 View 上选择一个项目,但它似乎只能用于接受多个选定项目的列表 View :
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);
最佳答案
您的代码看起来有效,并且可以正常工作,我已经在自己的GUI应用程序内部对其进行了内部测试,因此问题可能出在您尝试从实际过程之外进行访问。我注意到您已经为ListView硬编码了HWND。另外,在发送消息后立即释放虚拟内存这一事实我也要小心。请记住,已发送的消息将被过帐(假设HWND是正确的)到ListView消息泵。它可能不会立即得到解决,到那时,您已经释放了LVITEM的内存的可能性就很大。在GUI内部进行尝试,确保您可以正常工作,然后建议您回到此方法并设置适当的调试点(在GUI中,如果是其他调试点,则使用listView制作自己的简单对话框)确保正确接收了该消息,并且内存有效。