Tastendruck Simulieren (D3D)



  • Hallo ich möchte einen tastendruck simulieren bei einem spiel das mit DirectInput läuft hab schon vieles probiert

    mouse_event(MOUSEEVENTF_LEFTDOWN,x,y,0,0);
    
    PostMessage(hWnd, WM_KEYDOWN,0x45,0x12001); 
    
    void SimKey(int vKey)
    {
        KEYBDINPUT ki={0};
    
        ki.wVk = vKey;
        ki.wScan = MapVirtualKeyEx(vKey, 0, GetKeyboardLayout(0));
    
        INPUT ipEvent;
        ipEvent.type = INPUT_KEYBOARD;
        ipEvent.ki = ki;
    
        SendInput(1,&ipEvent,sizeof(INPUT));
    }
    

    also die sahen funzen unter windows aber nicht in dem spiel 😕

    hoffe mir kann einer helfen 🙂



  • Ich glaube nicht, dass das funktioniert, da DirectInout doch die Information direkt vom Eingabegerät liest - kann aber auch sein, dass ich mich irre 🙄



  • du speicherst doch bestimmt deine tasten in irgendeine var
    zb: bool keys[value]; oder dergleichen setzt dies doch einfach auf true; :p

    was möchstest denn du damit erreichen ?



  • Ich glaube, er will bei einem fremden Spiel einen Tastendruck simulieren 🙄



  • genau das will ich aber da das game directInput benutz klappt das irgentwie ned

    hat keiner ne alternative idee wie ich nen tastendruck simululieren kann 😕



  • kann mir einer mal was zu DeviceIoControl sagen 😕



  • Hallo

    Das ist ein ziemlich alter Beitrag. Aber ich habe genau das selbe Problem. Ich möchte auch für ein Spiel die Tastaturdrücke simulieren. Hat mir jemand eine Lösung dazu?

    Danke, Gruss wima



  • Irgendwie wird das immer und immer wieder gefragt und ich antworte immer und immer wieder die selbe Vermutung:

    Das wird so einfach nicht gehen, da sich DirectInput einen Snapshot, oder auch Abbild, vom gesamten Keyboard holt und nicht eventbasiert arbeitet.

    void handleInput()
    {
        static BYTE snapshot[256]; // Speicher für Snapshot
    
        keyboard->Acquire(); // Keyboard Zugriff holen
        keyboard->GetDeviceState(256, (LPVOID)snapshot); // Keyboardabbild machen
    
        if(keystate[DIK_SPACE] & 0x80)    // Wurde Space gedrückt?
            MessageBox(NULL, "Space gedrueckt!", "bla", MB_OK);
    
        return;
    }
    

    Mir würden zwei Möglichkeiten einfallen:
    1. Man könnte selbst einen Tastaturtreiber programmieren, der gleichzeitig einen Socket aufmacht und dadurch gesteuert werden kann.

    2. Der Keyboard Snapshot wird von DirectInput in einem 256 Byte großem Array gespeichert. Du könntest dir die Speicheradresse des Arrays in dem fremden Programm holen und den Speicher selbst manipulieren


Anmelden zum Antworten