Zyklisch virtuell Taste drücken



  • Ich möchte, das etwa alle 30 Sekunden eine Taste z.B. "F4" gedrückt wird.
    Also ich möchte das ereignis auslösen, wie kann ich das machen?



  • Also, das geht so:
    (Wir gehen mal davon aus, daß unser Programm "Prg" heißt.)
    Zuerst brauchst Du die Timerfunktion. In Deine Fenster-/Dialogfeldklasse (in dem Fall "CPrgDlg") kommt also die Funktion OnTimer rein:

    class CPrgDlg: public CDialog
    {
        //...
        void OnTimer (UINT nIDEvent);
        //...
    };
    

    Dann muß bei der MessageMap (die Du in "PrgDlg.cpp" findest) noch folgendes stehen:

    BEGIN_MESSAGE_MAP (CPrgDlg, CDialog)
        //...
        ON_WM_TIMER ()
        //...
    END_MESSAGE_MAP ()
    

    Die Timerfunktion selbst sieht so aus:

    void CPrgDlg::OnTimer (UINT nIDEvent) 
    {
        OnKeyDown (115, 0, 0); //115 müßte für F4 stehen.
    
        CDialog::OnTimer (nIDEvent);
    }
    

    Und an der Stelle, wo der Timer gestartet werden soll, schreibst Du

    SetTimer (10001, 30000, NULL); /*10001 ist hier beispielhaft die Timer-ID, 30000 steht für die
    Millisekunden und den letzten Parameter läßt Du auf NULL.*/
    

    Nun muß nur noch die OnKeyDown-Funktion erstellt werden. Das ganze geht analog zum Timer. In die Klassendefinition kommt

    void OnKeyDown (UINT nChar, UINT nRepCnt, UINT nFlags);
    

    Bei den Funktionsdefinitionen

    void CPrgDlg::OnKeyDown (UINT nChar, UINT nRepCnt, UINT nFlags)
    {
        /*Hier fügst Du Deinen speziellen Code ein.
          Der Parameter nChar beinhaltet die Nummer der gedrückten Taste.*/
    
        CDialog::OnKeyDown (UINT nChar, UINT nRepCnt, UINT nFlags);
    }
    

    Und in die MessageMap gehört noch

    ON_WM_KEYDOWN ()
    

    Alles klar? Wenn nicht, frag nochmal!

    P.S.: Den Timer stoppst Du mit

    KillTimer (10001)
    


  • So sieht das ja schon super aus (habs ja genauso gemacht), aber mein Problem ist das ich diesen Virtuellen Tastendrück nicht von diesem Prog aus haben will, sondern, ich will auf ein anderes Programm zeigen (nicht selbst geschrieben) wo dann diese Taste gedrückt wird 🙂

    Hoffe das ist schon eher ne Herausvorderung 😉



  • hallo,

    schau dir mal SendMessage und PostMessage an.
    Damit kannst du Befehle an andere Programme schicken.
    Unterschied zwischen den beiden: die eine schickt den Befehl
    direkt ab und wartet nicht auf ne Rückmeldung und die Andere
    wartet auf ne Rückmeldung (achtung, funktion in der es ver-
    wendet wird wartet dann auch).


Anmelden zum Antworten