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...


Anmelden zum Antworten