SendMessage für ListView, TreeView



  • Hallo zusammen,

    ich hab ein riesiges Proble, an dem ich nun schon fast eine Woche lang verzweifle.
    Ich benutze BCB und XP.

    Und zwar möchte ich ListViews oder TreeViews von fremden Programmen beeinflussen.
    Auslesen derselben ist kein Problem:

    GetWindowThreadProcessId(hWnd, &pid);
     process=OpenProcess(PROCESS_VM_.....
    
     WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL);
     SendMessage(hWnd, LVM_GETITEMTEXT, (WPARAM)line, (LPARAM)_lvi);
     ReadProcessMemory(process, _item, item, 512, NULL);
    

    funktioniert alles einwandfrei!

    Was nun nicht so klappt, wie ich mir das vorgestellt hab sind folgende Befehle der WinAPI:

    LVM_FINDITEM
    LVM_SETITEMSTATE
    LVM_SETITEM
    LVM_SETSELECTIONMARK

    TVM_SELECTITEM

    bei LVM_FINDITEM bekomm ich zum Beispiel immer -1, angeblich würde das Item nicht existieren. Wenn ich aber die Liste mit LVM_GETITEMTEXT durchsuche, und die Items mit meinem String vergleiche, dann wirds gefunden.
    (Warum geht LVM_GETITEMTEXT aber LVM_FINDITEM nicht? 😕 )

    Jedenfalls lässt sich auch über die LVM_SET... kein ITem auswählen. ich brauche aber unbedingt den blauen Rahmen um die Items.

    Bei TreeViews gibts änliche Probleme.
    TVM_SELECTITEM funzt nicht, aber dafür das Macro TreeView_SelectItem()
    Aber auch nur, wenn ich das Programm NICHT in der Entwicklungsumgebung laufen lasse. 😡
    Markiert wird das Item aber nicht, sondern nur der Tree aufgeklappt...

    Wäre echt super, wenn jemand ne Lösung für dieses mysteriöse Verhalten hätte, da das ganze meine Praktikumsarbeit darstellt.

    Gruss, Sven



  • Und zwar brauchen beide Elemente jeweils den Focus.
    Sprich, bevor irgend eine Message an die Objekte gesendet wird, muss WM_SETFOCUS gesendet werden.

    Gruss, Sven


Anmelden zum Antworten