Tastdendruck simulieren



  • Hi Leute,
    vorweg wollte ich sagen, dass ich in der SuchFuktion nix gefunden habe, desweiteren war ich mir nicht sicher ob das hier in das Forum gehört, aber egal ich leg jetzt einfach mal los:

    Ich würde mal gerne wissen wie ich mit

    LRESULT SendMessage (HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
    

    Tastendrücke simulieren könnte!Ich weiß schon wie ich hWnd ein Fenster zu weisen kann, aber ich wüde noch gerne wissen wie ich z.B. einen Tastendruck auf die Taste a simulieren kann. Wenn ihr mir dann noch eine Tabelle mit allen Constanten für die Tasten geben könntet wäre das echt super!

    Danke im voraus! Gruß Twitch.



  • Hi 😉 ,

    Ein Tastendruck ( ➡ dazu gehört drücken und loslassen ⚠ ) wird mit SendInput oder keybd_event (nimm lieber SendInput, keybd_event ist veraltet) simuliert, SendMessage sollte man dafür nicht verwenden (Falls doch: WM_CHAR, WM_KEYDOWN, WM_KEYUP, als 2. Parameter, für die weiteren Parameter siehe zugehörigen Link; Allgemeine Informationen siehe hier).

    Hier eine Liste aller 'User-Input-Messages' 😉 .

    Ein Anwendungsbeispiel zur Funktion SendInput/mouse_event/keybd_event:

    // Mausklick (links) simulieren (1):
    inline void VirtualMouseClick(int iXPos, int iYPos)
    {
        SetCursorPos(iXPos, iYPos);
    
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
    }
    
    // Mausklick (links) simulieren (2):
    inline void VirtualMouseClick(int iXPos, int iYPos)
    {
        INPUT ipSignal;
        ipSignal.type           = INPUT_MOUSE;
        ipSignal.mi.dx          = iXPos;
        ipSignal.mi.dy          = iYPos;
        ipSignal.mi.mouseData   = 0L;
        ipSignal.mi.dwFlags     = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN;
        ipSignal.mi.time        = 0L;
        ipSignal.mi.dwExtraInfo = 0L;
        SendInput(1, &ipSignal, sizeof(ipSignal));
    
        ipSignal.mi.dwFlags     = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTUP;
        SendInput(1, &ipSignal, sizeof(ipSignal));
    }
    
    // Tastendruck simulieren (1):
    inline void VirtualKeyPress(BYTE byVirtualKeyCode)
    {
        keybd_event(byVirtualKeyCode, 0, 0L, 0L);
        keybd_event(byVirtualKeyCode, 0, KEYEVENTF_KEYUP, 0L);
    }
    
    // Tastendruck simulieren (2):
    inline void VirtualKeyPress(BYTE byVirtualKeyCode)
    {
        INPUT ipSignal;
        ipSignal.type           = INPUT_KEYBOARD;
        ipSignal.ki.wVk         = byVirtualKeyCode;
        ipSignal.ki.wScan       = 0;
        ipSignal.ki.dwFlags     = 0L;
        ipSignal.ki.time        = 0L;
        ipSignal.ki.dwExtraInfo = 0L;
        SendInput(1, &ipSignal, sizeof(ipSignal));
    
        ipSignal.ki.dwFlags     = KEYEVENTF_KEYUP;
        SendInput(1, &ipSignal, sizeof(ipSignal));
    }
    

    Da hilft dir auch die Suchfunktion bzw. die FAQ weiter (Stichwort: 'keybd_event').

    Eine Liste der virtuellen Tastencodes findest Du hier
    ➡ Virtual-Key Codes-Table (MSDN)

    @Mods: Wäre es möglich das in die FAQ zu stellen, da das sehr oft gefragt wird 🙄 (und es ne Menge Arbeit war, das zusammenzustellen 😉 ).

    PS: Hoffe das trifft den Kern deiner Frage 😃 .



  • Das Programm hat aber nicht den Focus und somit geht deine Mett-Hode nicht.



  • SetFocus und Kohorten oder Du machst es doch mit SendMessage/PostMessage.


Anmelden zum Antworten