Aktives Fenster holen + Tastatureingaben "simulieren"



  • Hallo Forum,

    kann mir vielleicht verraten, wie ich mir den "Namen" des gerade aktiven Fensters holen kann?
    Also wenn z.B. ein bestimmtes Programmfenster geöffnet ist, möchte ich, dass mein Programm mit diesem arbeiten kann.

    Besser noch wäre es aber, wenn ich mir auch ein im Hintergrund geöffnetes Fenster holen könnte - weil mein Programm dann im Vordergrund arbeiten könnte.

    Der zweite Punkt:
    Wie kann ich für dieses Fenster Tastatureingaben (o.ä.) simulieren?
    Z.B. in eine Textdatei schreiben, ein Fomular ausfüllen, ...

    Kann mir jemand die passenden Funktionen nennen?

    LG



  • Erstmal, Nein du kannst nur in einem aktiven Fenster Tasten/Maus simulieren.

    mit GeActiveWindow() bekommst du das aktive Fenster. Ich würde dir aber raten, bevor die eine Input-Simulation startest die das Handle (hWnd) mit FindWindow() besorgst und mit zb. ShowWindow() aktivierst.

    Wie du was simulieren kannst?

    Maus:

    // kannst du machen
            SetCursorPos(x,y);
    
    	::mouse_event( MOUSEEVENTF_LEFTDOWN, x, y, 0, 0 );
    	Sleep(20);
    	::mouse_event( MOUSEEVENTF_LEFTUP, x, y, 0, 0 );
    

    Keyboard:

    keybd_event( VK_UP, 0, 0, 0 );
    	Sleep(10);
    	keybd_event( VK_UP, 0, KEYEVENTF_KEYUP, 0 );
    


  • Thx.

    Welche Header brauche ich dafür?
    Muss ich noch etwas beachten oder kann ich das einfach so verwenden?
    (Sry, hab gerade keinen Compiler, um es selbst auszuprobieren...)



  • So ... wäre schön wenn ihr mal in die F.A.Q. gucken würdet, aber nunja.
    Tastendruck/Mausklick simulieren

    Funktion (C)

    #include <windows.h>
    #include <string.h>
    
    void send_text(HWND hWnd, const char* const text)
    {
        size_t len = strlen(text);
        for (size_t pos = 0; pos < len; ++pos)
        {
            keybd_event(VkKeyScan(text[pos]), 0, 0L, 0L);
            keybd_event(VkKeyScan(text[pos]), 0, KEYEVENTF_KEYUP, 0L); 
        }
    }
    

    Funktion (C++)

    #include <windows.h>
    #include <string>
    
    void send_text(HWND hWnd, const std::string& text)
    {
        for (std::string::const_iterator it = text.begin(); it != text.end(); ++it)
        {
            keybd_event(VkKeyScan((*it)), 0, 0L, 0L);
            keybd_event(VkKeyScan((*it)), 0, KEYEVENTF_KEYUP, 0L); 
        }
    }
    

    Beispiel

    send_text(GetActiveWindow(), "Das soll da jetzt stehen!");
    

    Referenzen
    GetActiveWindow Funktion
    VkKeyScan Funktion
    keybd_event Funktion
    std::string-Klasse



  • K, vielen Dank.


Anmelden zum Antworten