SendInput sendet "num8", wenn ich "vk_up" senden möchte? Woher?

Nun, ich versuche eine einfache Modifikation für ein Spiel vorzunehmen, und dies ist der Code, der den Tastendruck emuliert:

#define PWNFUNC(a) static cell AMX_NATIVE_CALL a(AMX *amx, cell *params)
PWNFUNC(EmulateKeyPressINPUT)
{
    // This structure will be used to create the keyboard
    // input event.
    INPUT ip;

    // Set up a generic keyboard event.
    ip.type = INPUT_KEYBOARD;
    ip.ki.wScan = 0; // hardware scan code for key
    ip.ki.time = 0;
    ip.ki.dwExtraInfo = 0;

    ip.ki.wVk = params[2]; // virtual-key code for the "a" key
    switch(params[1])
    {
        case WM_KEYDOWN:
        ip.ki.dwFlags = 0; // 0 for key press
        break;
        case WM_KEYUP:
        ip.ki.dwFlags = KEYEVENTF_KEYUP;
        break;
    }
    SendInput(1, &ip, sizeof(INPUT));
    return 1;
}

das problem dabei ist, dass irgendwie, wenn ich eine pfeiltaste nach oben senden möchte, die numpad8-taste gesendet wird (vielleicht liegt es an meiner hardwaretastatur?). Wenn ich die Pfeiltaste auf meinem Keyboar drücke, geht das Flugzeug im Spiel vorwärts. Wenn ich den Aufwärtspfeil emuliere, ändern meine Triebwerke die Rotation (die Rotationsänderung wird auf Nummer 8 abgebildet). Das gleiche passiert mit Pfeil runter - Nummer 2, Pfeil links - Nummer 4 und Pfeil rechts - Nummer 6.

Was ist los?

__

Vielleicht ohne Bezug, aber wenn Sie den Code sehen möchten, der das Flugzeug steuert, ist dies:

(Es ist in PAWN - eine Skriptsprache)

        #define KEYPRESS_DOWN 0x0100
        #define KEYPRESS_UP 0x0101
        GetMovementSpeed(pos[0][0],pos[0][1],pos[0][2],true);
        new Float:speed = floatsqroot(pos[0][0]*pos[0][0]+pos[0][1]*pos[0][1]+pos[0][2]*pos[0][2])*174.0;
        if ( speed > 260.0 )
            speed = 260.0;

        if(GetVehicleModel() == 520)//f-22 airplane
        {
            static sent = 0;
            if(IsKeyDown(VK_TAB))
            {
                if(speed < 200.0)
                {
                    EmulateKeyPress(KEYPRESS_UP,VK_DOWN);
                    EmulateKeyPress(KEYPRESS_DOWN,VK_UP);
                    sent = 1;
                    DrawText( id,50.0,160.0,0xFFFFFFFF, "GO birdy!! gooo!!!!" );

                }
                else if(speed > 210.0)
                {
                    EmulateKeyPress(KEYPRESS_UP,VK_UP);
                    EmulateKeyPress(KEYPRESS_DOWN,VK_DOWN);
                    sent = 2;
                    DrawText( id,50.0,160.0,0xFFFFFFFF, "TOO fastststs!!!! SOTTP STOP!!!" );
                }
            }
            else if(sent == 1)
            {
                EmulateKeyPress(KEYPRESS_UP,VK_UP);
                sent = 0;
                DrawText( id,50.0,160.0,0xFFFFFFFF, "You won't see this message" );
            }
            else if(sent == 2)
            {
                EmulateKeyPress(KEYPRESS_UP,VK_DOWN);
                sent = 0;
                DrawText( id,50.0,160.0,0xFFFFFFFF, "Nor this one, c'mon if you do, you can notice a change in one f**king frame between 2 other frames?!" );
            }
            else
            {
                DrawText( id,50.0,160.0,0xFFFFFFFF, "Something other is going on.. our relation ship is too complicated :(" );
            }
        }
        else
        {
            DrawText( id,50.0,160.0,0xFFFFFFFF, "Well, f**k you too, no autopilot if you're not in an F-22.." );
        }

Antworten auf die Frage(2)

Ihre Antwort auf die Frage