[C++]SendInput systeem-wijd verzenden?

Pagina: 1
Acties:

  • ikt
  • Registratie: Juli 2008
  • Laatst online: 19:30
Hoi hoi

Ik probeer toetsenbordknopjes te simuleren in C++, zodat ik ze via mijn G27 kan benaderen. Het scriptje wat ik schrijf draait in GTA V via ScriptHookV en kan gewoon alles wat een ander programma ook kan, dus ik kan prima system calls uitvoeren en apparaten/hardware bereiken.

Het volgende draait in een loopje:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for (int i = 0; i < MAX_RGBBUTTONS; i++) {
        if (WheelToKey[i] != -1) {
            INPUT input;
            input.type = INPUT_KEYBOARD;
            input.ki.dwExtraInfo = 0;
            input.ki.wVk = 0;
            input.ki.wScan = MapVirtualKey(WheelToKey[i], 0);

            if (WheelDI.IsButtonJustPressed(i)) {
                input.ki.dwFlags = 0;
                SendInput(1, &input, sizeof(INPUT));
            }
            if (WheelDI.IsButtonJustReleased(i)) {
                input.ki.dwFlags = KEYEVENTF_KEYUP;
                SendInput(1, &input, sizeof(INPUT));
            }
        }
    }


Dit werkt prima. Als ik in mijn .ini knup 18 aan "E" bind, kan ik toeteren als een gek. Echter, wanneer een andere mod draait waarbij daar een functie aan "E" is verbonden, werkt deze [de andere mod functie] niet. Idem met andere knopkombinaties. De game leest alles graag uit.

Uit Microsoft's documentatie kan ik weinig halen:
MSDN: KEYBDINPUT structure (Windows)
MSDN: SendInput function (Windows)

Iemand een idee waar ik de mist in ga? Ik denk dat mijn script dus naar GTA V dat stuurt, en niet echt iets doet als een "E" in rammen zodat álle applicaties die draaien dit zien. Grappig genoeg werken shortcuts voor de Steam Overlay wel prima.

  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

Probeer het eens met keybd_event: MSDN: keybd_event function (Windows)

Als ik ruzie heb met SendInput werkt het soms wel met keybd_event.. Ik gok dat het te maken heeft met andere manier van keystrokes samplen (DirectInput of niet, enz..), maar dat weet ik niet zeker.

  • ikt
  • Registratie: Juli 2008
  • Laatst online: 19:30
Ik zal dat straks eens proberen :) Ik heb verder gezocht vandaag en dit kan blijkbaar ook:
http://stackoverflow.com/...manually-on-keyboard-in-c
Het kwam gisteren niet in me op om iets anders dan "system wide" of "system level" te zoeken. Dus eerst eens dit proberen, dat zijn maar enkele parameters die ik hoef te veranderen.

Edit - het werkt! Bedankt voor de input ;)

[ Voor 5% gewijzigd door ikt op 22-09-2016 21:00 ]