Tastenkombination an eine Anwendung übertragen



  • Hallo und vielen Dank für das Vorbeischauen.
    Ich habe schon einige Beiträge unter FAQ gelesen dabei habe ich diesen Code hier entdeckt:

    HWND hwnd = FindWindow("TForm1", NULL);
        if(hwnd)
        {
            SetForegroundWindow(hwnd);
            keybd_event(VK_F5, 0, 0, 0);
            keybd_event(VK_F5, 0, KEYEVENTF_KEYUP, 0);
        }
    

    Damit ist es möglich bei einer Anwendung ein Tastenereignis auszulösen(im diesen Fall F1). Was mich interessiert ist es auch möglich gleichzeitig mehrere Tastenereignisse zu simulieren? Also in meinem Fall muss ich eine Kombination von ALT+A an die Zielanwendung zu senden.

    Mein Ziel ist es nach Möglichkeit keine Behandlungsroutinen in der Zielanwendung (TForm1) zu schreiben um die eingegangenen Ereignisse zu filtrieren, wenn das überhaupt möglich ist.

    Vielen Dank die Hilfestellung
    coder24h



  • Hallo

    Du must eben nacheinander die einzelnen Events schicken, um zusammen ALT+A zu erzeugen. Schematisch sieht das also so aus
    - Sende KeyDown für ALT
    - Sende KeyDown für A
    - Sende KeyUp für A
    - Sende KeyUp für Alt

    bis bald
    akari



  • Danke!
    Ich werde das mal versuchen hinzukriegen, hast du vielleicht den virtual key für Taste A?



  • Hallo

    'A'
    

    🙄

    bis bald
    akari



  • Danke Akari, heute ist wohl nicht mein Tag. Ich bin deinem Tipp gefolgt, doch leider verhält sich das Programm nicht so wie ich das erwarten würde:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        const int KEYEVENTF_KEYDOWN = 3;
    
        HWND hwnd = FindWindow("TFormZiel", NULL);
        if(hwnd)
        {
            SetForegroundWindow(hwnd);
    
            keybd_event(VK_LMENU, 0, KEYEVENTF_KEYDOWN, 0);
            keybd_event('A', KEYEVENTF_KEYDOWN, 0, 0);
    
            keybd_event(VK_LMENU, 0, KEYEVENTF_KEYUP, 0);
            keybd_event('A', 0, KEYEVENTF_KEYUP, 0);
        }
    }
    

    Die Anwendung TFormZiel wird zwar gefunden in dem Fordergrund versetzt, doch die Kombination ALT+A kommt irgendwie nicht an !? Wende ich den Code auf das Formular TForm1, also die Anwendung wo dieser geschrieben ist, dann funktionier es richtig. Müsste man vielleicht noch etwas anderes beachten oder habe ich noch was übersehen?

    :xmas2:



  • Hallo, hier ist eine richtige Lösung:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        HWND hwnd = FindWindow("TFormZiel", NULL);
    
        if(hwnd)
        {
            SetForegroundWindow(hwnd);
    
            //sendet ein ALT+A
            keybd_event(VK_LMENU, 0, 0, 0);
            keybd_event('A', 0, 0, 0);
            keybd_event('A', 0, KEYEVENTF_KEYUP,0);
            keybd_event(VK_LMENU, 0, KEYEVENTF_KEYUP, 0);
    
        }
    }
    

    cya All :xmas1:



  • Hallo ich möchte einen ganzen String (wie bei VB Sendkeys) senden.

    wie geht das?

    hab es so probiert aber daraus wird kleines a und die 2????????????

    keybd_event('A', 0, 0, 0);
    keybd_event('A', 0, KEYEVENTF_KEYUP,0);
    keybd_event('b', 0, 0, 0);
    keybd_event('b', 0, KEYEVENTF_KEYUP,0);

    Danke



  • zorro888 schrieb:

    hab es so probiert aber daraus wird kleines a

    Logisch. Überleg doch mal, welche Tasten du drücken musst, um ein großes A zu bekommen.

    und die 2????????????

    Geht's noch?
    'b' ist kein gültiger Keycode.



  • Hallo,

    hab auch das Problem, dass das Fenster der externen Anwendung gefunden und aktiviert wird, diese aber immernoch minimiert ist. Somit wird die Tastenkombination nicht an die Anwendung übergeben.

    Maximiere ich die Anwendung vorher manuell, so funktioniert alles.

    Kann man das maximieren irgendwie vorher automatisieren, so dass es geschieht bevor die Tastenkombination übertragen wird?

    Gruss
    ifa01



  • ShowWindow(hwnd, SW_MAXIMIZE);


Anmelden zum Antworten