Seite 1 von 1

Probleme mit SendInput

Verfasst: Do Apr 09, 2009 11:14 am
von darkangel
Servus
Ich habe ein kleines Problem mit - SendInput -
Meines Wissens nach, muss man als 3. Parameter der Funktion die Groeße des Inputs angeben.
Doch wie genau kann ich diese Groeße herausfinden?

Schon einmal DANKE im Vorraus.

Re: Probleme mit SendInput

Verfasst: Do Apr 09, 2009 11:26 am
von fat-lobyte
Was für SendInput?
Welches System?
Welche Bibliothek?
Welche Version?
darkangel hat geschrieben:Meines Wissens nach, muss man als 3. Parameter der Funktion die Groeße des Inputs angeben.
Doch wie genau kann ich diese Groeße herausfinden?
Indem man die Referenz oder Anleitung der Bibliothek liest.

Kleiner Tip: eine Frage, die man mit 5 weiteren Fragen beantworten muss, ist keine gute Frage. Zweiter versuch, diesmal etwas besser bitte.

http://www.proggen.org/doku.php?id=faq:frageformulieren

Re: Probleme mit SendInput

Verfasst: Do Apr 09, 2009 12:40 pm
von darkangel
Ok.
Also..
Ich wollte eigentlich eine Tastenkombination/Tastatureingaben simulieren.
Und irgendwo in Google habe ich dann eben gelesen, dass sich - SendInput - dafuer eignen wuerde.
Ich benutze Windows XP.
Zwar habe ich die Beschreibung, der Funktion
http://msdn.microsoft.com/en-us/library/ms646310.aspx
und die Virtual-Key Codes dazu
http://msdn.microsoft.com/en-us/library ... S.85).aspx
gefunden.

Doch wie schon erwaehnt, habe ich keine Ahnung, womit ich den 3. Parameter fuellen soll.
Also habe ich es einfach mal so versucht:

Code: Alles auswählen

#define _WIN32_WINNT 0x0501
#include<windows.h>

int main()
{
    SendInput(1,
                0x44,
                sizeof(0x44));
}
Aber, wer haette das gedacht, es funktioniert nicht.
Der Compiler meldet: error: invalid conversion from 'int' to 'tagINPUT*'
Auf - #define _WIN32_WINNT 0x0501 - hat mich irgendein Eintrag in Google gebracht.
Zwar verstehe ich diese Zeile nicht ganz, doch muss es irgendetwas mit der Deklaration von - SendInput - zu tun haben.
Oder?
Jedenfalls wird die Funktion sonst nicht erkannt.


Ist diese Beschreibung besser?
Ich entschuldige mich jedenfalls fuer meinen vorherigen Eintrag^.^

Re: Probleme mit SendInput

Verfasst: Do Apr 09, 2009 1:16 pm
von Xin
Es ist auf jedenfall notwendig, dass Du beschreibst, woher eine Funktion kommt, wenn es nicht grade printf ist.

Code: Alles auswählen

UINT SendInput(      
    UINT nInputs,
    LPINPUT pInputs,
    int cbSize )
Da muss ein Zeiger auf eine INPUT Struktur rein, Du packst die 44 rein - was immer die 44 ist.

Daher auch die Fehlermeldung, dass ein int (die 44) kein Zeiger auf eine Input-Struktur ist.

Re: Probleme mit SendInput

Verfasst: Do Apr 09, 2009 1:20 pm
von fat-lobyte
Schon viel besser...
darkangel hat geschrieben:Auf - #define _WIN32_WINNT 0x0501 - hat mich irgendein Eintrag in Google gebracht.
Bitte nicht irgendwelchen Code kopieren ohne ihn zu verstehen! Das kann zu großen Problemen führen. Vor allem gilt in C die Faustregel: alles was mit __ Anfängt gehört dem Compiler und soll tunlichst nicht angegriffen werden. Von solchen grundlegenden definitionen bitte die finger lassen. Aber immerhin, hast schon gegoogelt und versucht die Lösung zu finden. *Thumbs Up*
darkangel hat geschrieben: Zwar habe ich die Beschreibung, der Funktion
http://msdn.microsoft.com/en-us/library/ms646310.aspx
und die Virtual-Key Codes dazu
http://msdn.microsoft.com/en-us/library ... S.85).aspx
gefunden.

Doch wie schon erwaehnt, habe ich keine Ahnung, womit ich den 3. Parameter fuellen soll.
Na dann lies doch deine eigenen Links!
MSDN hat geschrieben:pInputs [in] Pointer to an array of INPUT structures. Each structure represents an event to be inserted into the keyboard or mouse input stream.
Sagt doch schon alles, oder? Du brauchst erstmal eine Struktur vom typ INPUT. Diese richtest du dann richtig ein und übergibst einen Zeiger darauf auf die Funktion. Was die Struktur ist und wie man sie einrichtet, bitte der MSDN entnehmen.
darkangel hat geschrieben:Zwar verstehe ich diese Zeile nicht ganz, doch muss es irgendetwas mit der Deklaration von - SendInput - zu tun haben.
Oder?
Richtig. Wie gesagt, die Funktion nimmt einen Zeiger auf eine Struktur als Argument und kein Integer.

Versuchs mal so:

Code: Alles auswählen

    #include<Windows.h> /* Ich glaube das gehört groß...*/

    int main()
    {
        INPUT inp;
        /* hier dein Keyboardinput struct füllen. */

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

        return 0; /* Eigentlich nicht notwendig aber bitte guten Stil befolgen und auch der main funktion einen return wert geben. */
    }
Bitte lies dir genau die Referenz durch, dort steht alles genau erklärt.
darkangel hat geschrieben:Ist diese Beschreibung besser?
Ich entschuldige mich jedenfalls fuer meinen vorherigen Eintrag^.^
Ja viel besser. Da brauchst du dich nicht zu entschuldigen, reicht schon wenn dus ab jetzt besser machst. Du musst nur verstehen, aus deiner ursprünglichen Frage hat man wirklich nichts herauslesen können...

ps.: WinAPI und MSDN suxx :x