HARDWAREINPUT | SendInput



  • Warum willst Du das? Hast Du nich Win95/98/Me?



  • ? Arbeite auf xp. Ich denke, dass SendInput() die modernste Methode zum Senden von Input war. Habe ich mich da geirrt? Was wäre denn da eine andere Methode? Ich habe bisher nur diese eine gefunden, aber wenn es noch was besseres gibt, umso besser 🙂 .
    Gruß LauritzG :xmas1: :xmas2:



  • In der Doku steht zumindest, dass "HARDWAREINPUT" nur für WIn9x geht... oder lese ich da was falsch?



  • Auf http://msdn.microsoft.com/en-us/library/ms646269%28VS.85%29.aspx
    steht: "Minimum Operating System: Windows 98", ähnlich wie bei KEYBDINPUT, wo nur noch NT (4 (!))hinzugefügt worden ist. Eigentlich müsste das funktionieren.

    Gruß,
    LauritzG :xmas1: :xmas2:



  • Hier lese ich es so, dass es *nur* für Win9x gilt:
    http://msdn.microsoft.com/en-us/library/ms646270



  • In winuser.h steht folgendes:

    #if (_WIN32_WINNT > 0x0400)
    
    typedef struct tagMOUSEINPUT {
        LONG    dx;
        LONG    dy;
        DWORD   mouseData;
        DWORD   dwFlags;
        DWORD   time;
        ULONG_PTR dwExtraInfo;
    } MOUSEINPUT, *PMOUSEINPUT, FAR* LPMOUSEINPUT;
    
    typedef struct tagKEYBDINPUT {
        WORD    wVk;
        WORD    wScan;
        DWORD   dwFlags;
        DWORD   time;
        ULONG_PTR dwExtraInfo;
    } KEYBDINPUT, *PKEYBDINPUT, FAR* LPKEYBDINPUT;
    
    typedef struct tagHARDWAREINPUT {
        DWORD   uMsg;
        WORD    wParamL;
        WORD    wParamH;
    } HARDWAREINPUT, *PHARDWAREINPUT, FAR* LPHARDWAREINPUT;
    
    #define INPUT_MOUSE     0
    #define INPUT_KEYBOARD  1
    #define INPUT_HARDWARE  2
    
    typedef struct tagINPUT {
        DWORD   type;
    
        union
        {
            MOUSEINPUT      mi;
            KEYBDINPUT      ki;
            HARDWAREINPUT   hi;
        };
    } INPUT, *PINPUT, FAR* LPINPUT;
    
    WINUSERAPI
    UINT
    WINAPI
    SendInput(
        __in UINT cInputs,                     // number of input in the array
        __in_ecount(cInputs) LPINPUT pInputs,  // array of inputs
        __in int cbSize);                      // sizeof(INPUT)
    
    #endif // (_WIN32_WINNT > 0x0400)
    

    Und _WIN32_WINNT (s. Zeile 49&1) ist bei mir 0x0600. Daran kann es also nicht liegen.

    Gruß,
    LauritzG :xmas1: :xmas2:



  • Gäbe es irgendeine Alternative zu der HARDWAREINPUT? Ich meine, so etwas wie hardware_event gibt es ja wohl nicht, oder? Eine Möglichkeit wäre natürlich, einen eigenen Joysticktreiber zu schreiben. Aber dazu habe ich zu wenig Ahnung und Erfahrung. Gibt es noch einen anderen Weg?

    Schon mal danke im Voraus,
    LauritzG :xmas1: :xmas2: :xmas1: :xmas2:



  • LauritzG schrieb:

    Ich meine, so etwas wie hardware_event gibt es ja wohl nicht, oder?

    Wer sowas schreibt, ist zu dumm um google zu benutzen 😉 . (Jaja, ich tr**** mich selbst)
    http://msdn.microsoft.com/en-us/library/ms909851.aspx
    Außer dem habe ich noch nichts gefunden. Jetzt quäle ich mal die Suchmaschine meiner Wahl mit hardware_event. Hoffe mal, das ist ergiebiger als die Suche nach HARDWAREINPUT. Die Parameter der Funktion hardware_event sind die gleichen wie die Member von HARDWAREINPUT. hardware_event gibt es seit Win3.1, HARDWAREINPUT seit 95.

    Gruß,
    LauritzG :xmas1: :xmas2: :xmas1: :xmas2:



  • LauritzG schrieb:

    LauritzG schrieb:

    Ich meine, so etwas wie hardware_event gibt es ja wohl nicht, oder?

    Wer sowas schreibt, ist zu dumm um google zu benutzen 😉 . (Jaja, ich tr**** mich selbst)

    Wer sowas schreibt, ist zu dumm, zu lesen. 😃
    Das ist für Windows CE. Bin noch nicht weiter als bisher. Aber vielleicht ist das das gleiche bei Windows.
    Ich such mal weiter.

    Gruß
    LauritzG 😞 :xmas1: :xmas2:



  • http://msdn.microsoft.com/en-us/library/ms645543%28VS.85%29.aspx
    Das scheint ein anderer, vielversprechenderer Weg zu sein: Raw Input. Hat da irgendjemand schon mal was mit gemacht??? In der MSDN steht, dass man mit Raw Input eine WM_INPUT-Message erhält, die man vorher abonniert oder so ähnlich haben muss. Die wird mit einem RAWINPUT verknüpft. Habe mehr Hoffnung. Wenn ich herauskriege, was ich mit RAWINPUT machen soll, könnte ich über SendMessage() gehen. Aber erst mal gehe ich jetzt vom Computer weg.
    Gute Nacht. 😉

    EDIT: Ist Raw Input tiefer als DirectInput? Ich meine, kann ich durch verwenden von Raw Input DirectInput manipulieren. Es gibt ja diese WM_INPUT Message, die RawInput empfängt. Wenn ich die über SendMessage sende, kann ich dann damit DirectInput täuschen? (Nein, ich will nicht cheaten 😉 )


Anmelden zum Antworten