Komponenten von fremder Application herausfinden ?



  • oder mit Classname und FindWindowEx

    greetz KN4CK3R



  • Sucht denn "FindWindowEx" im jeweiligen Fenster nach vorhandene Komponenten ?

    hab nich so die Ahnung aber daran solls ja nich scheitern 🙂 ?


  • Mod

    FindWindowEx hilft Dir nicht, wenn Du nicht schon was weißt... 😉



  • bin ein Schritt weiter:

    Als Ausgabe bringt die Message "MozillaUIWindowClass".

    HWND w=FindWindowEx(NULL, NULL, NULL, NULL);
      char TName[512];
      while(w)
      {
          GetWindowText(w, TName, 512);
    
    	  if(strstr(TName, "Mozilla"))
          {
                 GetClassName(w,TName, 512);
                 ShowMessage(TName);
          }
    
          w=GetNextWindow(w, GW_HWNDNEXT);
      }
    

    Bei mspaint.exe kam MSPaintApp heraus.
    Bei cdplayer.exe kam MMFRAME_MAIN heraus.

    Wie kann ich nun aber TButton oder TEdit Komponenten in diesem Fenster finden ?


  • Mod

    Dann musst Du mit GeWindow in die Childwindows reinsuchen.

    BTW: Was sollen TEdit und TButton sein? Ich ahne, dass es aus den Borland Libraries kommt. Unter Windows gibt es nur allgemeine Fensterklassen oder eben privat registrierte.

    Verwende mal Spy++ (Wenn Du dieses MS Tool hast) und schau Dir die Strkturen mal an.



  • Ok habe mir X-Spy gezogen (Spy++ habe ich nicht), kommt genial das Teil.

    Ich dachte aber immer was scheinbar nicht geht das ich von einer fremden Anwendung
    die 2 Edit-Felder besitzt ich diese genau identifizieren kann um dann einfach an jedes einen ganz bestimmten Text senden kann. Oder gibts da ne Reihenfolge die immer eingehalten wird so das da nie was schieflaufen kann ? Woher weiss ich welches Edit-Fenster welche ControllID hat da sich diese ja jedesmal ändert ?



  • Der Programmierer bestimmt, welches Fenster welche ID besitzt. Spy++ kann diese lediglich anzeigen. Keiner garantiert die Reihenfolge. Wenn der Programmierer meint, in einem Update die IDs ändern zu müssen, dann macht er es eben. Es ist Deine Sache dafür zu sorgen, dass Du auch die richtigen erwischt.



  • OK, alles klar ich muss zugeben mir war das alles überhaupt nicht bewusst.

    Wusste nicht wie kompliziert diese Sache sein kann da in all meinen Anwendungen
    die ControlID bei jedem Programm-Neu-Start eine andere ist. (X-Spy zeigt mir das)

    ABER

    In Anwendungen wie "calc.exe" zum Beispiel ist diese ControlID vom Edit-Feld immer die selbe.

    calc.exe = 403 (sagt X-Spy)

    Wie man so eine ID beim Programmieren vergibt weiss ich gar net.
    1.Kann man die einfach mit SetDlgItem vergeben ?
    2.Geht das auch bei nicht zur Laufzeit erstellten Komponenten ?
    3.Welchen Nachteil hat denn so eine Nicht-ID-Vergabe noch ?

    Ich hoffe das ich EUCH nich aufn Sack gehe ?

    bis denne


  • Mod

    Igor_911 schrieb:

    Wie man so eine ID beim Programmieren vergibt weiss ich gar net.
    1.Kann man die einfach mit SetDlgItem vergeben ?
    2.Geht das auch bei nicht zur Laufzeit erstellten Komponenten ?
    3.Welchen Nachteil hat denn so eine Nicht-ID-Vergabe noch ?

    Diese IDs werden beim Erzeugen eines Fensters vergeben. Meistens sind diese vom Programmierer fest vorgegeben. Aber es gibt auch Methoden für eine dynamische Verwaltung.
    zu 1. Nein!
    zu 2. Es gibt nur Fenster, die zur Laufzeit erstellt werden!
    zu 3. Man braucht keine ID, wenn man über das Handle grundsätzlich zugreift.

    Ich würde sagen, dass DU mit diesen Fragen erst mal ein Winddows Tutorial durchgehst. 🤡



  • Ja kannst Du mir mein gutes Fenster Tutorial empfehlen 🙂 (mit ID-Vergabe)


Anmelden zum Antworten