SendInput Problem



  • Hallo warum kann ich mir so kein a in einem Editor ausgeben lassen ?

    Wenn ich den input kram in eine Funktion packe funktioniert es nicht.
    Es kommt auch keine Fehlermeldung.

    [ Unten das Beispiel funktioniert ohne Probleme ]

    #include <iostream>
    #include<windows>
    using namespace std;
    
    void send ();
    
    int main( int argc , char *argv[] )
    {
    
    Sleep(1000);
    
    send ();
    
    system("PAUSE");
    
    }
    
    void send ()
    {
            INPUT InputData;
            int iEvents;
    
    	InputData.type = INPUT_KEYBOARD;
    	InputData.ki.wVk = 0x41;
    
    	iEvents = SendInput (1, &InputData, sizeof(InputData));
    }
    

    So hingegen funktioniert es ohne Probleme

    #include <iostream>
    #include<windows>
    using namespace std;
    
    int main( int argc , char *argv[] )
    {
    Sleep(1000);
           INPUT InputData;
            int iEvents;
    
    	InputData.type = INPUT_KEYBOARD;
    	InputData.ki.wVk = 0x41;
    
    	iEvents = SendInput (1, &InputData, sizeof(InputData));
    
    system("PAUSE");
    
    }
    


  • Du musst die Taste *drücken* und dann wieder *loslassen*!



  • Hallo so funktioniert es jetzt bei mir.

    Hier in der MSDN steht ja noch:
    http://msdn.microsoft.com/en-us/library/ms646310(VS.85).aspx

    nInputs [in]
    UINT
    Number of structures in the pInputs array.

    Meinen die damit das Array hier ?

    Wobei eigentlich ist es ja eine struktur ...

    Wenn ich schreibe: SendInput (3 , &data, sizeof(data));

    Dann wird mein Bildschirm kurz Schwarz o_O wahr dann wohl ein Harware Input?

    typedef struct tagINPUT {
      DWORD         type;
      MOUSEINPUT    mi;
      KEYBDINPUT    ki;
      HARDWAREINPUT hi;
    } INPUT, *PINPUT;
    

    http://msdn.microsoft.com/en-us/library/ms646270(VS.85).aspx

    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    void send ();
    
    int main( int argc , char *argv[] )
    {
    
    Sleep(1000);
    
    send();
    
    system("PAUSE");
    
    }
    
    void send()
    {
    	INPUT data;
    	data.type = INPUT_KEYBOARD;
    
    	data.ki.wVk = 0x41;
            data.ki.dwFlags = KEYEVENTF_EXTENDEDKEY , KEYEVENTF_KEYUP;
    
    	SendInput (2 , &data, sizeof(data));
    }
    

  • Mod

    Vielleicht solltest Du erstmal etwas C++ Grundlagen lernen.
    Wenn Du an SendInput 2 oder 3 Events übergibst solltest Du auch einen Array der entsprechenden Größe zur Verfügung stellen.
    Wenn Du einen Event als data definierst dem System aber sagst hier kommen 2, übergibst Du natürlich Garbage im zweiten Event.

    Ansonsten, wenn es Dir um simulieren von Tastatureingaben geht dann kannst Du auch z.B. Autoit verwenden, dann musst Du Dich nicht mit C++ quälen 😉



  • @Martin

    Wieso extra ein Array anlegen o_O

    In diesem Beispiel hier wird auch keins verwendet oder ist das falsch wie es da steht ?

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-167580-and-view-is-previous.html

    Und wieso stehen in der MSDN nie Code Beispiele zu den Sachen die ich brauche >_< zu keybd_event gibts z.b. ein beispiel ^^

    Kann man keybd_event auch unter Windows 7 verwenden ?



  • In dem Beispiel wird ja auch keine "2" übergeben, oder?



  • Ah ich glaub jetzt weiss ich was du meinst:

    So müsste es ja dann richtig sein:

    Ich benutze ja nur KEYBDINPUT ki; und DWORD type; aus der Struktur.

    Und das erste Element von einem Array ist ja immer 0.

    Stimmt meine Aussage so oder ist das falsch ? 😞

    SendInput (1 , &data, sizeof(data));



  • Stimmt das was ich gesagt habe oder nicht?

    Ich will wissen ob ich es verstanden habe !

    Ah ich glaub jetzt weiss ich was du meinst:

    So müsste es ja dann richtig sein:

    Ich benutze ja nur KEYBDINPUT ki; und DWORD type; aus der Struktur.

    Und das erste Element von einem Array ist ja immer 0.

    Stimmt meine Aussage so oder ist das falsch ?

    SendInput (1 , &data, sizeof(data));


  • Mod

    Wenn &data angibst ist das exakt ein Element und eben nicht zwei.
    Da spielt es keinerlei Rolle welche Member der Struktur Du nun verwendest oder nicht.

    Wenn Du mehrere Informationen übergeben willst benötigst Du eben einen Array.

    Was ist daran unklar?

    Wenn Dir immer noch was unklarist, dann lies ein Tutorial...
    Dein Problem hängt auch nicht damit zusammen, dass es keine Beispiele gibt. Alleine in diesem Forum findest Du x-Einträge zu SendInput!


Anmelden zum Antworten