Wie ein Element in einer Listenansicht auszuwählen, die zu einem Zeitpunkt nur 1 ausgewähltes Element erlaubt

StackOverflow https://stackoverflow.com/questions/1081979

  •  22-08-2019
  •  | 
  •  

Frage

Ich habe versucht, ein Element auf einer externe Listenansicht zu wählen, aber es scheint nur mit Listviews zu arbeiten, die mehr ausgewählten Elemente akzeptieren:

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);
War es hilfreich?

Lösung

Ihr Code sieht gültig und sollte funktionieren, ich kann es intern innerhalb meiner eigenen GUI-Anwendung selbst getestet haben, so vielleicht das Problem in Ihrem Versuch, von außerhalb des aktuellen Prozesses zuzugreifen. Ich stelle fest, dass Sie hart, um die HWND für das Listview codiert haben. Auch würde ich mit der Tatsache, vorsichtig sein, dass Sie sofort den virtuellen Speicher freigeben, nachdem die Nachricht gesendet wird. Denken Sie daran, dass die gesendete Nachricht geschrieben werden wird (vorausgesetzt, die HWND korrekt ist) an das Listview-Nachrichtensystem. Es kann nicht umgehend erledigt werden und durch die Zeit, es ist, gibt es eine gute Chance, Sie bereits die Erinnerung an die LVITEM freigegeben. Versuchen Sie es intern in der GUI, stellen Sie sicher, dass die Arbeit, dann würde ich vorschlagen, geht zurück auf diesen Ansatz und die Festlegung geeigneter Debug-Punkte (in der GUI, wenn dies jemand anderes ist, Ihren eigenen einfachen Dialog mit einem Listview machen) zu machen sicher, dass die Nachricht in geeigneter Weise empfangen wird, und dass der Speicher gültig ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top