Tasten druck simulieren



  • Zu beachten ist, dass man heute eigentlich "SendInput" verwenden sollte... und bei mir funktioniert das sehr gut...

    INPUT pInput[2];
        pInput[0].type           = INPUT_KEYBOARD;
        pInput[0].ki.wVk         = VK_NUMLOCK;
        pInput[0].ki.wScan       = 0;
        pInput[0].ki.dwFlags     = 0; // Nill for keydown
        pInput[0].ki.time        = 0;
        pInput[0].ki.dwExtraInfo = 0;
    
        pInput[1].type           = INPUT_KEYBOARD;
        pInput[1].ki.wVk         = VK_NUMLOCK;
        pInput[1].ki.wScan       = 0;
        pInput[1].ki.dwFlags     = KEYEVENTF_KEYUP;
        pInput[1].ki.time        = 0;
        pInput[1].ki.dwExtraInfo = 0;
    
        if (SendInput(2, pInput, sizeof(INPUT)) == 0)
        {
          return false;
        }
        return true;
    


  • Wenn man die HardwareScancodes mit einbezieht funktionierts sogar für DirectInput 😉 (SendInput)



  • das mit dem input läuft bei mir nicht so... muss ich da eine bestimmte bibliothek einbinden? und das mit dem hook... könntet ihr mir da eventuel bitte ein beispiel geben?



  • Frittnschneider schrieb:

    das mit dem input läuft bei mir nicht so... muss ich da eine bestimmte bibliothek einbinden?

    Was geht denn nicht. Kommt da vielleicht eine Fehlermeldung vom Compiler oder sonstwas??? Wäre es vielleicht sinnvoll, wenn Du diese als Fehlerbeschreibung mitteilen würdest?

    Frittnschneider schrieb:

    und das mit dem hook... könntet ihr mir da eventuel bitte ein beispiel geben?

    Für was willst Du denn einen Hook, wenn Du tastedrücke simulieren willst!?



  • nun ja das mit dem hook hab ich qasdfgh (siehe oben)

    der compiler erkennt die klasse bzw. des struct input nicht

    : error C2065: 'INPUT' : nichtdeklarierter Bezeichner
    : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'pInput'
    : error C2065: 'pInput' : nichtdeklarierter Bezeichner
    : error C2109: Index benoetigt ein Feld oder einen Zeigertyp
    : error C2109: Index benoetigt ein Feld oder einen Zeigertyp
    : error C2228: Der linke Teil von '.type' muss eine Klasse/Struktur/Union sein
    : error C2065: 'INPUT_KEYBOARD' : nichtdeklarierter Bezeichner
    : error C2109: Index benoetigt ein Feld oder einen Zeigertyp
    : error C2228: Der linke Teil von '.ki' muss eine Klasse/Struktur/Union sein
    : error C2228: Der linke Teil von '.wVk' muss eine Klasse/Struktur/Union sein
    : error C2109: Index benoetigt ein Feld oder einen Zeigertyp
    [....]
    : error C2065: 'SendInput' : nichtdeklarierter Bezeichner
    Fehler beim Ausführen von cl.exe.

    ach ja kann man auch zwei tastendrücke zu gleich simuliren? müsste nähmlich alt+bild auf bzw bild ab simulieren.



  • Vermutlich musst Du noch "_WIN32_WINNT=0x0400" in den Projekteinstellungen definieren, oder VOR dem #inlcude <windows.h>

    #define _WIN32_WINNT 0x0400
    #inlcude <windows.h>
    

    Natürlich kannst Du auch mehrere "Tastedrücke" Simulieren... das wird gerade auch gemacht (nämlich 2: Taste drücken und Taste loslassen).



  • ich weis nicht was ich verkehrt mache es läuft halt immer noch nicht.... es sind die gleichen fehler beim compilieren. gibt es eventuell auch eine andre lösung?



  • Nimm eine richtige Entwicklungsumgebung und ein aktuelles PSDK...



  • Diese includes werden für die INPUT struktur und die DX Funktionen gebraucht

    #include <WinAble.h>				//SendInput
    #include <windows.h>				//Standart
    #include <dinput.h>				//DirectX
    #pragma comment(lib, "dinput8.lib" )	//DirectX
    #pragma comment(lib, "dxguid.lib" )		//DirectX
    


  • Ein vollständiges Beispiel:

    #include <stdio.h>
    #define _WIN32_WINNT 0x0403
    #include <windows.h>
    #include <tchar.h>
    
    int _tmain()
    {
      INPUT pInput[2];
      pInput[0].type           = INPUT_KEYBOARD;
      pInput[0].ki.wVk         = 'A';
      pInput[0].ki.wScan       = 0;
      pInput[0].ki.dwFlags     = 0; // Nill for keydown
      pInput[0].ki.time        = 0;
      pInput[0].ki.dwExtraInfo = 0;
    
      pInput[1].type           = INPUT_KEYBOARD;
      pInput[1].ki.wVk         = 'A';
      pInput[1].ki.wScan       = 0;
      pInput[1].ki.dwFlags     = KEYEVENTF_KEYUP;
      pInput[1].ki.time        = 0;
      pInput[1].ki.dwExtraInfo = 0;
    
      if (SendInput(2, pInput, sizeof(INPUT)) == 0)
      {
        return 1;
      }
      return 0;
    }
    

Anmelden zum Antworten