Maus Click auf ListView simulieren
-
Hi,
ich lese aus einem anderen Programm den Listview aus und möchte auf eine bestimmte Zeile einen Doppelklick simulieren.
Hier mal de betreffende code:// listview = handle auf ein listview int count=(int)SendMessage(listview, LVM_GETITEMCOUNT, 0, 0); int i; LVITEM lvi, *_lvi; char item[512]; char *_item, *_subitem; unsigned long pid; HANDLE process; GetWindowThreadProcessId(listview, &pid); process=O penProcess(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); _item=(char*)VirtualAllocEx(process, NULL, 512, MEM_COMMIT, PAGE_READWRITE); _subitem=(char*)VirtualAllocEx(process, NULL, 512, MEM_COMMIT, PAGE_READWRITE); lvi.cchTextMax=512; char table[]="Diese TabellenZeile suche ich"; for(i=0; i<count; i++) { lvi.iSubItem=0; lvi.pszText=_item; lvi.mask = LVIF_TEXT; WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL); SendMessage(listview, LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)_lvi); ReadProcessMemory(process, _item, item, 512, NULL); if( strncmp(item, table, strlen(table)) == 0 ){ lvi.state=LVIS_SELECTED; lvi.stateMask=LVIS_SELECTED; WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL); SendMessage(listview,LVM_SETITEMSTATE ,(WPARAM)i,(LPARAM)_lvi); // ab hier ist nun die entsprechende Zeile selected, nun möchte ich // einen doppelklick simulieren //SendMessage(DOPPELKLICK^^); }
Habe schon etliches probiert.. z.B.:
WPARAM wParam = MAKEWPARAM (3565, BN_DOUBLECLICKED); SendMessage(listview, WM_COMMAND, wParam, 0);
Er selektiert immer die gewünschte Zeile aber es klappt einfach nicht mit dem Doppellklick bzw klick ..
jemand ne Idee?
-
Du musst WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_LBUTTONDBLCLK, WM_LBUTTONUP
ans Fenster senden.Es kann auch sein das du den Focus setzen musst.
-
Guck mal in die FAQ...