Handle etc ermitteln



  • 1. Hör auf rum zuwinseln.
    2. Ich hab es noch nicht einmal Kompiliert, da ich nur deinen Code soweit korrigiert hab. Dafür brauch ich keinen Kompiler der das nachguckt 😉
    3. Auch ich übersehe Fehler ... hab es mal angepasst ...



  • LOL k, sry wär nur scheisse wenn ich deswegen das Programm ned fertig stellen kann.

    k Thx ich schau gleich mal.



  • Jo ... es ist nur auch scheiße wenn man sich alles vorkauen lässt -.-



  • Ich lass mir nicht alles vorkauen.
    Ich habe mich wirklich bemüht das Problem zu lösen, doch sogar als ich bereits 3 Probleme gelöst habe (ich red jetzt von denen die ich alleine gelöst habe und meine damit nicht kleine Fehler beseitigen) hat es immer noch nicht ganz funktioniert.
    Ich hab vor dem Thread gesucht, bei google, MSDN etc, und bin leider nicht fündig geworden.
    Meine Freunde (die programmieren können) sind alle nur Linux-Programmierer und haben mir dabei nicht helfen können.
    Zudem habe ich das Prinzip und die Funktionsweise des Programms alleine verstanden, es scheitert lediglich am Detail.
    Mir ist klar dass ich hier einige nerve weil es den Anschein macht (zumindest für einige hier) als ob ich hier einfach aufs Board komme und die anderen auffordere mein Problem zu lösen etc.
    Ich kommt echt nicht hinter den Fehler, das ist alles.
    Ich hab auch ein wenig rumgespielt dran und hat noch immer nicht ganz funktioniert.

    Das einzige was ich mir in Zukunft sparen werde is das "Gewinsel" lol, aber sonst habe ich nichts falsch gemacht und eig auch nicht gegen irgendwelche Verhaltensregeln vestoßen.

    Ich bin eig eh ruhig geblieben für das was man mir hier dauernd unterstellt.

    Naja, auf jeden Fall allen vielen Dank für die Hilfe

    MFG



  • Hi ich bins nochmal.

    Ich hab mich jetzt noch ein wenig gespielt.
    Leider funzt es noch immer nicht.
    Hab auch mal TEXT lieber durch (LPSTR) ersetzt.
    Hmmm wieder das selbe Problem, er findet Fenster, Unterfenster nur leider nicht den Child-Button.

    Kann es sein, dass es gar kein Child button ist sondern etwas anderes und es deshalb nicht funktioniert?

    EDIT:

    Ok, laut Ausgabe (habs ein bisschen überarbeitet) findet er den Button (mit Anmelden) kann ihn jedoch nicht klicken.

    Blöd ist auch, dass egal welchen Text ich eingebe, meine Testausgabe meldet der Button sei gefunden worden....

    Hmm hier mal der Source soweit:

    #include <windows.h> 
    
    int WinMain(HINSTANCE hInstance, 
                         HINSTANCE hPrevInstance, 
                         LPSTR  lpCmdLine, 
                         int       nCmdShow) 
    { 
        MessageBox(NULL,  (LPSTR)  "Der OK-Button-Klicker für MSN-Messanger ist aktiviert!", (LPSTR)  "OK-Button-Klicker", MB_OK | MB_ICONINFORMATION); 
    
        HWND hWndMessanger = NULL; 
    
        while (hWndMessanger == NULL) 
        { 
            hWndMessanger = FindWindow( (LPSTR)  "MSBLWindowClass",  (LPSTR)  "Windows Live Messenger"); 
    
            if (hWndMessanger == NULL)             
                Sleep(100); 
        } 
    
        MessageBox(NULL,  (LPSTR)  "FENSTER", (LPSTR)  "OK-Button-Klicker", MB_OK | MB_ICONINFORMATION); 
    
        HWND hWndDirectUI = FindWindowEx(hWndMessanger, NULL,  (LPSTR)  "DirectUIHWND", NULL); 
    
        if (hWndDirectUI == NULL) 
            return 0; 
    else
    		    MessageBox(NULL,  (LPSTR)  "CHILDFENSTER", (LPSTR)  "OK-Button-Klicker", MB_OK | MB_ICONINFORMATION); 
    
    HWND hWndButton;
    for (;hWndButton==NULL;){
        hWndButton = FindWindowEx(hWndDirectUI, NULL, NULL,  TEXT  ("Anmelden")); 
    }
        if (hWndButton !=NULL) 
    MessageBox(NULL,  (LPSTR)  "BUTTON", (LPSTR)  "OK-Button-Klicker", MB_OK | MB_ICONINFORMATION); 
    
        SendMessage(hWndButton, WM_LBUTTONDOWN, 0, 0); 
        SendMessage(hWndButton, WM_LBUTTONUP, 0, 0); 
    
        return 0; 
    }
    

    Lg



  • Nun gut, deine for (;hWndButton==NULL;) - Schleife ist zwar immer noch recht unsinnig, denn bei einem Fehler wirst du dort ewig hängen...

    Un du meintest, dass bei TEXT("Anmelden") auch durch eine beliebige Änderung des Textes immer noch deine BUTTON-MessageBox ausgegeben wird?!



  • so komisch das auch klingt, ja.
    ich hab den Source 1:1 hier reingepostet.

    So hab das nochmal getestet bevor ich was Falsches sage.
    Er gibt wie gesagt immer die "Button"-MessageBox aus. (auch wenn ich zb sfasdfas eingebe)

    Lg

    EDIT:

    Ok wenn ich die Schleife weglasse, kommt die "Button-Meldung" nicht mehr.
    Problem: Jetzt kommt sie gar nicht mehr.

    EDIT: Auch wenn ich zb diesen Schnipsel einsetze:

    HWND hWndButton[10]; 
    for (int i=0;i<=9;i++)
          {
        hWndButton[i] = FindWindowEx(hWndDirectUI, NULL,  NULL,  NULL);
           } 
    
    for (int i=0;i<=9;i++)
    	{
        SendMessage(hWndButton[i], WM_LBUTTONDOWN, 0, 0); 
    
        SendMessage(hWndButton[i], WM_LBUTTONUP, 0, 0); 
            }
    

    sprich alle gefundenen Buttons durchgehe, und die dann auch anklicke passiert nichts.



  • Öhm kann sich einer mal bitte die mühe machen und nachgucken was da für childs sind? es scheint mir als hätte muhi da im Moment nicht mehr sooo den Durchblick ...
    Er verschlimmbessert den Code ja nur noch 😃 So wie ich ihn gepostet hab war er eigentlich i.O.



  • 😃 😃 😃 😃 😃 😃 😃 😃

    1. Man kann automatisch einloggen als Option angeben, aber das nur am Rande^^
    2. Das Fenster, in dem der Anmelden-"Button" ist, hat keine Childfenster... D.h. der Button wurde nicht mit CreateWindow o.ä. erzeugt, sondern wird in der WM_PAINT vom Hauptfenster mitgezeichnet 🤡

    Ergo: Du kannst kein Handle auf den Button bekommen, weil er kein Fenster ist :p



  • LOL?

    K vielen Dank, hmm dh die einzige Möglichkeit den Button zu betätigen ist mit einem Maus-Klick?

    Zu 1.: K das mitm Auto-Einloggen wusste ich eh thx

    MFG



  • muhi schrieb:

    K vielen Dank, hmm dh die einzige Möglichkeit den Button zu betätigen ist mit einem Maus-Klick?

    Wenn das wirklich so ist, muss Du es mit einem Klick machen 😃 ... .
    Falls die Frage kommt: Guckst Du <Hier>



  • 😃 , k thx ich glaube ab hier schaff ichs alleine weiter.

    Nur noch eins(hoffentlich gg):Das Problem ist, dass der Messenger ja keine fixe Startposition hat.
    Mit deiner Funktion is es ja einfach einen Mausklick zu machen;aber ist das Fenster eig auch zu identifizieren sprich ansprechbar? (sprich: gibt es eine Funktion die mir die Koordinaten übergibt?)

    Mfg



  • GetWindowRect ?! Vllt. ?! Oder was meinst Du ?



  • Ganz genau! Danke!

    Hab ich richtig verstanden?

    Egal wie das Fenster verschoben ist, ich brauch nur das Fenster finden und dann?

    EDIT: Ah ok habs verstanden, da ich ja dann die Eckpunkte hab kann ich ja dann auch die Position des "Buttons" bestimmen oder?

    lg



  • Ja, Mausklick ist wohl das einzig mögliche. Könntest du nen Screenshot von dem Fenster machen und die Position des "Button" raussuchen.
    In deinem Programm holst dir dann das Rechteck des Fesnters (GetWindowRect) und berechnest, an welchem Punkt auf dem Bildschirm du klicken musst.
    Dann klickst du halt mit SendInput.

    Edit: Hab hier nen Link gefunden, wo du glaubich Spy++ runterladen kannst. Damit kannst du schnell rausfinden, wie die Klasse des Buttons ist oder ob es so einen Button überhaupt gibt 😉
    http://www.techwarelabs.com/downloads/?action=file&id=169



  • Oder sowas hier: http://www.windows-spy.com/

    Kannst du dir nicht direkt mit GetWindowRect die Position des Buttons in Bildschirm-Koordinaten holen?!



  • Hmm erstmal thx für die Links.

    Nein mit der Funktion kann ich mir nur die Position berechen sprich ich hol mir die Koordinate des Eckpunktest und berechene damit wo ich klicken muss.
    Höhrt sich eig sehr einfach an ich probiers gleich mal^^.

    lg



  • Hi,

    ich hab jetzt die Funktion eingebaut,eigentlich kein Problem.
    Ich hab mir die Propertionen geholt nur leider sind die bei der Y-Achse immer unterschiedlich. (manchmal 1,4 oft aber auch) 2,3

    Mit welcher Funktion kann ich ein Fenster in den Vollbildmodus versetzen?

    lg



  • Sry ich meinte im Vorpost Proportionen.



  • MoveWindow(hWnd, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), TRUE);
    

Anmelden zum Antworten