Handle eines deaktivierten Buttons finden.



  • Hallo Mitmenschen,
    ich hoffe, dass ich das richtige Subforum erwischt habe.
    Meine Frage:
    Ist es möglich an das Handle eines deaktivierten (Enabled = false) Buttons zu kommen? Habe schon mit verschiedenen Tools wie WinSight oder WinSpy herumprobiert, aber vergebens. Der Button wird nicht angezeigt(und somit auch nicht das Handle).
    Eigentlich eine Ja-Nein-Frage; als doch ja, dann wäre eine kurze Erläuterung für mich sehr hilfreich.
    Vielen Dank im voraus.



  • häh natürlich, wieso sollte das nicht gehen, roflé...



  • Wenn sich der Button in einem Dialgo befindet:

    hWnd_Button= GetDlgItem(hWndDlg, BUTTON_ID);
    

    oder meinst du jetzt einen Button der sich nicht in deiner Anwendung befindet?


  • Mod

    Ebenfalls wird der Button mit Sicherheit über die Funktion GetWindow beim enumerieren aufgezählt, wenn Du das richtige Parent erwischst.
    http://msdn2.microsoft.com/en-us/library/ms633515(VS.85).aspx



  • Habe es mit GetWindow versucht aber vergebens. Dann mit FindWindowEx ebenso vergebens;
    Zum Hintergrund: Auf einer Form existiert eine GroupBox und in dieser als Child ein TEdit und ein TSpeedButton. Ich benötige wie schon geschrieben das Handle des Buttons.
    An das Handle der Edit komme ich ohne Probleme mit nachfolgenden Code, nur wenn ich "TEdit" in "TSpeedButton" umwandle, dann geht der Debugger in den Fehlerteil. Das Edit und der SpeedButton liegen aber definitiv beide als Child der GroupBox vor. Deswegen kann ich mir nicht erklären, warum mein Vorgehen nicht zum Ziel führt.

    HWND hwndForm = FindWindow(NULL,"Up Yours");  // Hauptform suchen
        if (hwndForm == NULL)
        {
           ShowMessage("Fehler Form nicht gefunden.");
        }
    
        HWND hwndGroupBox = FindWindowEx(hwndForm, NULL, "TGroupBox", NULL);  // GroupBox der Form suchen
        if (hwndGroupBox == NULL)
        {
          ShowMessage("Fehler GroupBox nicht gefunden");
        }
    
        HWND Ziel = FindWindowEx(hwndGroupBox, NULL, "TSpeedButton", NULL);  // bei TEdit klappt es
        if (Ziel == NULL)
        {
          ShowMessage("Fehler SpeedButton nicht gefunden");
        }
    


  • spy++



  • Ein "TSpeedButton" hat kein HWND.



  • Dass ein SpeedButton kein HWND hat, macht die Sache offenbar komplizierter.
    Kann ich die Sache dann auf diesem Wege vergessen oder gibt es noch ganz andere Methoden, um diesen SpeedButton, der in einer anderen Anwendung sitzt, zu bearbeiten?



  • was soll TSpeedButton sein?! Geh mal ins Borland oder wo das Zeug sonst herkommt!



  • Ja, richtig. TSpeedButton ist Teil der Borland VCL. Diese Komponente liegt aber in einer anderen Anwendung als in der meinen, deshalb muss ich doch zwangsläufig mit WinAPI-Mitteln arbeiten. Mir ist persönlich kein anderer Weg bekannt.

    Oder anders gefragt:
    Da TLabel ja auch kein Handle hat, so dürfte man es ja auch nicht in anderen Anwendungen ansprechen können. Sehe ich das richtig? Oder kann man Objekte noch auf einem anderen Wege bekommen?



  • Rostfrei[] schrieb:

    Oder anders gefragt:
    Da TLabel ja auch kein Handle hat, so dürfte man es ja auch nicht in anderen Anwendungen ansprechen können. Sehe ich das richtig? Oder kann man Objekte noch auf einem anderen Wege bekommen?

    Das siehst Du richtig. Und die WinAPI bringt Dir da deshalb nichts, da das intern gekapselt wird und daher nichts mehr (direkt) mit WinAPI zu tun hat. Also ich glaube, dass es da keine Möglichkeit gibt, diese 'Fenster' anzusprechen. Aber frag zur Sicherheit nochmal im Borland-Forum nach 😉 .


Anmelden zum Antworten