I am using this code to select a listview item. i specify the postion of item using (WPARAM)2 . So this one supposed to highlight and selct the postion 2 in the listview. But unfortuently it does not select but it does deselct. I mean if the item is selected by mouse click it can deselect it but can not select it. Could any one tell me what i am doing wrong here.Thanks
SendMessage(listview, LVM_SETITEMSTATE, (WPARAM)2, (LPARAM)_lvi);
SendMessage(listview, LVM_SETITEMSTATE, (WPARAM)2, (LPARAM)_lvi);
Code:
void CSelectuserDlg::OnButton1()
{
// TODO: Add your control notification handler code here
HWND listview=NULL; // List View identifier
HWND parent,child;
parent=NULL;
child=NULL;
parent = ::FindWindow("My Window Class",NULL);
child =::FindWindowEx(parent,0,"WTL_SplitterWindow",NULL);
child =::FindWindowEx(child,0,"WTL_SplitterWindow",NULL);
child =::FindWindowEx(child,0,"WTL_SplitterWindow",NULL);
child =::FindWindowEx(child,0,"ATL:0053C8D0",NULL);
listview=::FindWindowEx(child,0,"SysListView32",NULL);
LVITEM lvi, *_lvi;
unsigned long pid;
HANDLE process;
GetWindowThreadProcessId(listview, &pid);
process=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, pid);
_lvi=(LVITEM*)VirtualAllocEx(process, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE);
lvi.mask = LVIF_STATE;
lvi.state = true;
lvi.stateMask = LVIS_SELECTED;
WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL);
::SendMessage(listview, LVM_SETITEMSTATE, (WPARAM)2, (LPARAM)_lvi);
VirtualFreeEx(process, _lvi, 0, MEM_RELEASE);
}