Handle etc ermitteln



  • Was ist das für ein zusammen gesnippel? Gibt es ja garnet ... der Code ist so rel. sinnlos 😉

    HWND cb;      
             for (;cb==NULL;) {
            HWND /*wtf soll hier HWND ?! */ cb = FindWindowEx(father, NULL, NULL,(LPCTSTR)"&Anmelden");
    }
    

    sollte man geschickterweise mit der while machen: ->

    HWND hWndButton = NULL;
    while (hWndButton == NULL)
        hWndButton = FindWindowEx(hWndMain, NULL, NULL, _T("&Anmelden"));
    

    Und da ist auch wieder ein grundlagenproblem. Du holst bei jedem durchlauf nen neues HWND ... ersetz es durch meinen und es stimmt ...



  • Danke!

    Nur leider funzt das _T ned (error #2140: Type error in argument 4 to a function; found 'int' expected 'const char *'.)

    habs mal durch (LPCSTR)ersetzt.

    Hmmm funzt trotzdem ned. (der Compiler nimmts zwar aber es funzt ned)

    lg

    ps: Viell passt dieser thread ganz gut in die FAQ



  • Die while-Schleife macht eigentlich so gar keinen Sinn - FindWindowEx liefert NULL zurück, wenn er nichts findet (also solltest du FindWindowEx nur solange aufrufen, wie der Rückgabewert != NULL ist). Wobei du wohl gar keine Schleife brauchst (und wenn, macht diese auch nur Sinn, wenn du FindWindowEx nicht jedes Mal wieder von vorne suchen lässt und dazu musst du den 2. Parameter setzen) - oder gibt es mehrere Buttons mit der Beschriftung "Anmelden"?



  • weiss jetzt ned ob die Frage sarkastisch gmeint is gg aba es gibt nur einen Button mit Anmelden.

    EDIT: Naja leider kann ich den 2ten Parameter nicht setzen da ich ihn ja nicht kenne und auch nicht herausfinden kann oder?

    Lg



  • Ich sagte ja schon, wenn es auf einer Ebene nur einen Button gibt, der deinen Suchkriterien gibt, dann musst du FindWindowEx ja eh nur ein Mal (für diese Ebene) aufrufen und folglich bleibt der 2. Parameter eh auf NULL.



  • K thx.

    Hmmm ich hab alles befolgt was ihr mir geraten habt und leider funktioniert es immer noch nicht....

    Hab selbst auch schon genug herumprobiert und es nahe ans Ziel gebracht nur leider klappt es trotzdem ned.

    Hmm hier nochmal der Source den ich gerdade habe:

    #include <windows.h> 
    
    int WinMain(HINSTANCE hInstance, 
                         HINSTANCE hPrevInstance, 
                         LPSTR     lpCmdLine, 
                         int       nCmdShow) 
    { 
    
        MessageBoxEx(NULL,(LPCTSTR)"Der OK-Button-klicker für MSN läuft jetzt im Hintergrund",(LPCTSTR)"^_^", 0,0); 
    
        while (TRUE) { 
    
            HWND w = FindWindow((LPCSTR) "MSBLWindowClass",(LPCSTR)"Windows Live Messenger");//Großvater 
    
    //(LPCTSTR)"MSBLWindowClass",(LPCTSTR)"Windows Live Messenger"); 
    
            if (w == NULL) { 
                Sleep(100); 
    MessageBoxEx(NULL,(LPCTSTR)"SHIT",(LPCTSTR)"", 0,0); 
                continue;
            } 
    else MessageBoxEx(NULL,(LPCTSTR)"PASST",(LPCTSTR)"", 0,0); 
    HWND test; 
        HWND father = FindWindowEx(w,NULL, "DirectUIHWND",NULL); 
    
    //DirectUIHWND 
            // wähle alles erlauben aus 
    HWND hWndButton = NULL; 
    
        hWndButton = FindWindowEx(father, NULL, NULL, ("&Anmelden")); 
            //FindWindowEx(w,NULL,NULL,(LPCSTR)"&Anmelden"); 
            if (hWndButton != NULL) { 
                MessageBoxEx(NULL,(LPCTSTR)"Button gefunden",(LPCTSTR)"Geht", 0, 0); 
                return 1; 
            } 
    
            // auf zulassen klicken 
            SendMessage(hWndButton,WM_LBUTTONDOWN,0,0); 
            SendMessage(hWndButton,WM_LBUTTONUP,0,0); 
    
        } 
    
        return 0; 
    }
    


  • Es wäre sehr nützlich zu wissen, was da jetzt wieder nicht funktioniert. Welche MessageBoxen gibt er aus, oder gar keine oder klickt er einfach den Button nicht?



  • Hi, k sry,

    Alles Messages vor "Button gefunden gibt er aus" sprich "PASST" und "PASST-2".

    er findet den verdammten Button einfach ned alle anderen Handles sind ungleich NULL nur wenn ich dann father für die letzte Funktion als Parameter nehmen und sogar alles andere auf NULL setze findet er nix..

    puh....das is echt nervtötend...

    Lg



  • Ach jetzt weiß ich was die 1. schleife soll ... du willst warten bis die Anwendung gestartet wurde .. kk 😃

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


  • ich weiss nicht , läuft das bei dir? Also am Pc (falls du MSN hast mein ich)

    bei mir noch nicht..

    lg



  • hmmm will einfach ned gehen, wäre schade wenn dieser Thread umsonst gewesen wäre hat jmd viell noch ne Idee?

    Thx



  • Beim Aufruf der ersten Funktion Findwindowex scheitert er, bitte helft mir, wenn ich das ned gebacken bekomme kann ich das Programm in den Wind schiessen...



  • 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.


Anmelden zum Antworten