ein Programm das ein Programm kontrolliert



  • Hi,
    ich will mal ein Programm schreiben das ein anderes automatisch bedient.
    z.B. Buttons betätigt und Edit Felder ausfüllt. Ist sowas überhaupt möglich?
    Und wenn, welche Funktionen können für so etwas genutzt werden?
    Ich vermute SendMessage() mit dem HWND des anderen Fensters aber wie kriegt man ein HWND von einem fremden Programmfenster? Und was ist wenn ich nicht weiß wie das Programm strukturiert ist sondern nur weiß welche Buttons es zu betätigen gilt. Wie kann ich dann einen Klick mit dem Cursor auf einen Punkt simulieren?



  • The_incredible_Guest schrieb:

    Wie kann ich dann einen Klick mit dem Cursor auf einen Punkt simulieren?

    z.b. so:

    SetCursorPos (10, 20);
    mouse_event (MOUSEEVENTF_LEFTDOWN, 0,0,0,0);
    mouse_event (MOUSEEVENTF_LEFTUP, 0,0,0,0);
    

    click auf position x==10, y==20



  • hi!
    gibs da so ne übersicht wo ich rausfinden kann welchen keycode ich für die tasten brauche?

    hab da mal so ein kleines prog... das auf eine internetseite navigiert, und soll in das loginfeld einen text schreiben!!

    #include <windows.h> 
    #include <string> 
    using namespace std; 
    
    int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) 
    { 
        // also ich will zuerst eine internetseite aufmachen lassen: www.a1.net
        ShellExecute(NULL,"open", "C:\\Programme\\Internet
        Explorer\\IEXPLORE.EXE",NULL,NULL,SW_SHOWNORMAL); 
    
        HWND hWndInternet_Explorer = FindWindow("Internet Explorer",NULL); 
        HWND hWndEdit = FindWindowEx(hWndInternet_Explorer,NULL,"Edit",NULL); 
        string text = "www.a1.net"; 
    
        // Adresse senden 
        SendMessage(hWndEdit ,WM_SETTEXT,0,(LPARAM)text.c_str()); 
    
        // Enterdruck simulieren 
        SendMessage(hWndEdit ,WM_SETTEXT,0,(LPARAM)0x13); 
    
        // Window finden...
        HWND hwnd = FindWindow("www.A1.net - A1 Kristallklar", NULL); 
        if(hwnd)  
        { 
           SetForegroundWindow(hwnd);
           // mit der maus auf das login feld gehen 
           SetCursorPos (10, 20);
           mouse_event (MOUSEEVENTF_LEFTDOWN, 0,0,0,0);
           mouse_event (MOUSEEVENTF_LEFTUP, 0,0,0,0);
    
           // benutzernamen eintragen: testuser
           keybd_event(0x6A, 0, 0, 0); 
           keybd_event(0x6A, 0, KEYEVENTF_KEYUP, 0);
       }            
    
       return 0; 
    }
    

    wie bekomm ich den hwnd fensternamen? der is ja bei jeden user anders, also bei internetexplorer window?

    cu



  • Und wie gibt man dann einen Text in ein Edit Feld ein und betätigt Enter oder eine andere Taste auf der Tastatur.





  • geeky schrieb:

    Warum rufst du die Seite nicht direkt ohne Umweg über den Internet Explorer auf ?

    via WinInet:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/http_sessions.asp

    oder via WinHttp:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winhttp/http/winhttp_sessions_overview.asp

    ja weil ich vielleicht etwas in ein edit feld auf eine internetseite schreiben will...
    gibs da so ne übersicht wo ich rausfinden kann welchen keycode ich für die tasten brauche?

    cu
    cu



  • micky maus schrieb:

    ja weil ich vielleicht etwas in ein edit feld auf eine internetseite schreiben will...
    gibs da so ne übersicht wo ich rausfinden kann welchen keycode ich für die tasten brauche?

    Die Virtual Key Codes stehen in einem Windows-Header, einfach mal suchen.
    Ansonsten kannst du Spy++ nehmen, das zeigt den Key-Code direkt an.



  • Hört sich für mich so an, als wolltest du nen Formular ausfüllen und absenden...



  • geeky schrieb:

    Hört sich für mich so an, als wolltest du nen Formular ausfüllen und absenden...

    Ich will auf www.a1.net navigieren! dann will ich mit der maus auf myA1.net klicken! und dann als benutzernamen: test eintragen...
    da muss halt die maus no mal in die editbox von benutzernamen klicken u dann key_events senden....

    #include <windows.h> 
    #include <string> 
    using namespace std; 
    
    int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) 
    { 
            // also ich will zuerst eine internetseite aufmachen lassen: www.a1.net 
    
    	HWND hWndEdit;
    
    	ShellExecute(hWndEdit, //Fensterhandle
                     NULL, // not used
                     "http://www.a1.net", // Die Website
                     NULL, // not used
                     NULL, // not used
                     SW_NORMAL);
    
    	ShowWindow(hWndEdit, SW_MAX);
    
    	// Window finden... 
            if(hWndEdit)   
            { 
               SetForegroundWindow(hWndEdit);
    
    	   Sleep(5000);
    
           	   // mit der maus auf myA1.net klicken 
               SetCursorPos (80, 200); 
               mouse_event (MOUSEEVENTF_LEFTDOWN, 0,0,0,0); 
               mouse_event (MOUSEEVENTF_LEFTUP, 0,0,0,0); 
    
    	   Sleep(3000);
    
    	   // in Benutzernameedit klicken
    	   SetCursorPos (160, 290); 
               mouse_event (MOUSEEVENTF_LEFTDOWN, 0,0,0,0); 
               mouse_event (MOUSEEVENTF_LEFTUP, 0,0,0,0); 
    
               // benutzernamen eintragen: testuser 
               keybd_event(0x6A, 0, 0, 0); 
               keybd_event(0x6A, 0, KEYEVENTF_KEYUP, 0); 
       }             
    
       return 0; 
    }
    

    was sagst zu meinem ansatz??? nur kann ich mit keybd_event gleich einen ganzen text reinschreiben?? bitte comments zum programm!! wie weiß ich ob die seite fertig geladen ist? ich hab da mal 2 Sleep rein getan...hm nit so gut?

    cu



  • *Schieb*
    Was ist aus deinem Programm geworden?
    Ist dein Problem gelöst?
    Ich finde das Programm ziemlich interessan.
    Vorschlag: Schreib dir doch Methoden in der du Strings automatisch in char umwandelst und diese automatisch in Key events umwndelst und diese dan aus gibst 😉
    is zwar nicht so leicht und wenig aber bestimmt ungeheuer braubar.

    PS: Hi freue mich endlich ein so Großes und scheinbar "Allwissendes" C++ Forum gefunden zu haben.



  • THE-PUNISHER schrieb:

    *Schieb*
    Was ist aus deinem Programm geworden?
    Ist dein Problem gelöst?
    Ich finde das Programm ziemlich interessan.
    Vorschlag: Schreib dir doch Methoden in der du Strings automatisch in char umwandelst und diese automatisch in Key events umwndelst und diese dan aus gibst 😉
    is zwar nicht so leicht und wenig aber bestimmt ungeheuer braubar.

    PS: Hi freue mich endlich ein so Großes und scheinbar "Allwissendes" C++ Forum gefunden zu haben.

    ja das programm läuft soweit! nur wollt ich halt lieber einen post http request an einem server schicken, das funzt no net;-(

    cu


Log in to reply