2009-07-04 60 views
1

我一直在试图选择在外部列表视图中的项目中选择一个项目,但它似乎只与接受多项选择的列表视图工作:如何在ListView只允许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); 

回答

1

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

相关问题