2009-07-04 61 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自己的簡單對話框),使確保郵件正在被正確接收,並且內存有效。

相關問題