SendInput()?

Nizomi

Mitglied
Hi,

ich finde kaum etwas zur SendInput Funktion...
habe zwar mal probiert es selbst zu machen(was dann natürlich in ner flutwelle von fehlermeldungen endete) aber nuja
ich möchte der im moment aktiven applikation sagen das die taste h gedrückt wurde

ich find auch kaum source wo sendinput verwendet wird so das ich mir diesen ansehen und daraus lernen könnte
also wie verwende ich sendinput ( am besten wäre mit source beispiel)
 
Das sollte eigentlich so gehen:
Code:
INPUT InputData;
  int iEvents;
  
  
  InputData.type = INPUT_KEYBOARD;
  InputData.ki.wVk = VK_H;
  InputData.ki.wScan = 35;
  InputData.ki.dwFlags = 0;
  InputData.ki.time = time(NULL);
  InputData.ki.dwExtraInfo = 0;
  
  
  iEvents = SendInput(1, &InputData, sizeof(InputData)):
Aber wenn Du uns sagst, was Du schon gemacht hast und welche Fehler wo auftreten und auch, welchen Compiler Du verwendest, dann können wir Dir evtl. besser helfen.
Und bitte beachte die Groß/Kleinschreibung!
 
Ach,

in den meisten Foren wird nich so auf Groß-/Kleinschreibung geachtet ^^
Ich benutze Code::Blocks IDE mit Microsoft Visual C++ Toolkit 2003 und Microsoft Platform SDK.

Code:
#include <windows.h>
bool done;
INPUT haction[2];
haction[0].type=INPUT_KEYBOARD;
haction[0].ki.wVk=VK_H;
haction[0].ki.wScan=35;
haction[0].ki.dwFlags=0;
haction[0].ki.time=time(NULL);
haction[0].ki.dwExtraInfo=0;
haction[1].type=INPUT_KEYBOARD;
haction[1].ki.wVk=VK_H;
haction[1].ki.wScan=35;
haction[1].ki.dwFlags=KEYEVENTF_KEYUP;
haction[1].ki.time=time(NULL);
haction[1].ki.dwExtraInfo=0;
Line 3 error C2146: syntax error : missing ';' before identifier 'haction'
Line 3 error C2501: 'INPUT' : missing storage-class or type specifiers
Line 3 error C2501: 'haction' : missing storage-class or type specifiers
Line 4 error C2466: cannot allocate an array of constant size 0
Und dann noch einige Folgefehler weil die Initialisierung nich geklappt hat...
 
Zuletzt bearbeitet:
Da ist der Fall ziemlich klar: Die Struktur INPUT ist nicht bekannt.
Warum das allerdings so ist, ist mir auch nicht ganz klar. INPUT ist in winuser.h deklariert, die in der windows.h eingebunden wird (Zeile 166). Allerdings muß dafür 'RC_INVOKED' definiert sein und 'NOWINRES' darf nicht definiert sein. Wenn er INPUT nicht kennt, dann kennt er aber auch SentInput nicht, da das gleich darunter in der Winuser.h deklariert ist.
Die Funktion selber ist in der user32.lib.
Es könnte funktionieren, wenn Du die Struktur und den Funktionskopf selber deklarierst, das könnte aber auch andere Probleme verursachen. Möglicherweise kannst Du das Gleiche ja mit keybd_event erreichen. Das ist zwar auch in der Winuser.h, aber braucht evtl. andere Defines.
 
Hmm ja aber bei
Code:
keybd_event(48,0,0,0);
keybd_event(48,KEYEVENTF_KEYUP,0,0);

kommt nur 00 raus ^^
bei Microsoft's MSDN steht aber 48 ist der Virtual Scancode für H
 
moin


Nochmal:
Die Angaben dort sind hexadezimal!
Scroll mal ein bischen runter, da kommt z.B. eine 4D und da wirst du jawohl einsehen müssen das das nicht dezimal ist.


mfg
umbrasaxum
 
1. Laut MSDN hat keybd_event keinen Rückgabewert.
2.Es gibt einen 'virtual key code', der ist 'VK_H', und es gibt einen Scancode, der ist 35. das sind zwei unterschiedliche Dinge:
virtual key code
A device-independent value that identifies the purpose of a keystroke as interpreted by the Windows keyboard device driver.
scan code
A device-dependent value that identifies a physical key on the keyboard. Each key on a keyboard generates two unique scan codes--one when the user presses the key and the other when the user releases the key.
Du könntest allerdings auch eine WM_KEYDOWN-Message an das Fenster schicken (mit SendMessage oder PostMessage). das Fensterhandle, das Du dafür benötigst, kannst Du mit FindWindow erhalten.
 
Achso k mein Fehler ^^
Danke für die Hilfe es geht jetzt
würde mich aber trotzdem interessieren warum das die INPUT structure nicht gefunden hat.
 
Zurück