Makro löst keine Hotkeys aus

08/22/2007 20:06 Term!nX#1
Hallo,

bin gerade dabei, meine alten au3 makros in C++ umzuschreiben. Die Funktionen stehen auch schon alle, aber das ist nicht das Problem. Ich benutze die keybd_event methode. Wenn ich zB den Tastendruck von der 8 simuliere, wird nicht der Hotkey ausgelöst, der auf 8 liegt, nämlich das benutzen einer fähigkeit. Im Chat oder innem Textdokument wird die 8 auch reingeschrieben, aber das digitale drücken einer taste löst eben keine hotkeys aus, you know.

Liegt das vll daran, dass die Funktion veraltet sein soll?
08/22/2007 20:29 pengpong#2
guck dir mal
[Only registered and activated users can see links. Click Here To Register...]
an, vielleicht hilft dir das weiter
08/22/2007 21:27 Term!nX#3
Heisst das ich sollte die SendInput funktion verwenden? Wenn ich das so richtig verstanden habe, gibts eine Möglichkeit, Tasteninputs an mehrere Fenster gleichzeitig zu senden.. Auch wenn sie nicht aktiv sind. Ist ja prinzipiell hoch interessant, doof nur dass die au3 Funktion die ich damals verwenden wollte nicht ausreichend funktioniert.
08/23/2007 04:04 pengpong#4
Also SendInput solltest du keybd_event bevorzugen, weil keybd_event überholt ist.

Um einen Tastendruck an mehrere Fenster gleichzeitig zu senden, kannst du dir mal [Only registered and activated users can see links. Click Here To Register...] anschauen, ich hab gehört damit soll das gehen.
08/23/2007 13:38 Term!nX#5
Quote:
Originally Posted by pengpong View Post
Also SendInput solltest du keybd_event bevorzugen, weil keybd_event überholt ist.

Um einen Tastendruck an mehrere Fenster gleichzeitig zu senden, kannst du dir mal [Only registered and activated users can see links. Click Here To Register...] anschauen, ich hab gehört damit soll das gehen.
Schade, denn SendInput sieht so verdammt kompliziert aus :D



So hab mal den alten Code aufgegabelt:

Code:
//Wir wollen ein <Return> senden
KEYBDINPUT kip;
kip.wVk = VK_RETURN;
kip.wScan = NULL;
kip.dwFlags = NULL;
kip.time = 0;

INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki = kip;



//Folgende Zeilen machen Probleme bei Lineage, sind aber dort auch nicht unbedingt nötig
//Wenn man das ganze mit z.B. Notepad testen möchte, braucht man sie allerdings....
//SetForegroundWindow(targetHWND);
//SetFocus(targetHWND);

SendInput(1,&ip,sizeof(INPUT));
Das sind die Sachen wo ich noch probleme habe, der rest mit InputAttach bla ist klar. Bin noch nicht so der Master in C++, aber KEYBDINPUT würd ich mal als Datenstruktur auffasen, das selbe mit IP. Allerdings sagen mir die Parameter von SendInput nichts, hier der MSDN Link: [Only registered and activated users can see links. Click Here To Register...]
08/23/2007 14:24 pengpong#6
jo, du übergibst SendInput ein Struct das beliebig viele Sub-Structs hat. In unserem Fall aber nur ein Sub-Struct.

SendInput braucht dann als Parameter die Anzahl der gekapselten Sub-Strucs, das Input-Struct und die Größe des ganzen Gedöns.

Hier mal ein Beispiel, das eine Taste drückt, und dann wieder loslässt:
(Ich glaub da ist ein bug, weil input[0].type müsste eigentlich auch auf INPUT_KEYBOARD gesetzt werden)


Code:
        int mykey;

	INPUT input[2];
	memset(input, 0, sizeof(input));
	input[0].type = INPUT_KEYBOARD;

	mykey=inputcode;

	input[0].ki.wVk = mykey;
	input[0].ki.dwFlags = 0;
	input[0].ki.time = 0;
	input[0].ki.dwExtraInfo = 0;

	input[1].ki.wVk = mykey;
	input[1].ki.dwFlags = KEYEVENTF_KEYUP;
	input[1].ki.time = 0;
	input[1].ki.dwExtraInfo = 0;

	SendInput(2,input,sizeof(INPUT));
Interessant in der MSDN ist auch [Only registered and activated users can see links. Click Here To Register...]
08/23/2007 14:36 Term!nX#7
Saved my day, großen Dank auch :)

Ich hab den Compilerfehler schonmal gehabt, kann mich aber zum verrecken nicht dran erinnern wie ich den wegbekommen habe o.o

Fehlermeldung:
11 E:\Dev-Cpp\sendinputlol.cpp `INPUT' undeclared (first use this function)
11 E:\Dev-Cpp\sendinputlol.cpp expected `;' before "input"
12 E:\Dev-Cpp\sendinputlol.cpp `input' undeclared (first use this function)
13 E:\Dev-Cpp\sendinputlol.cpp `INPUT_KEYBOARD' undeclared (first use this function) 15 E:\Dev-Cpp\sendinputlol.cpp `inputcode' undeclared (first use this function)
27 E:\Dev-Cpp\sendinputlol.cpp `SendInput' undeclared (first use this function)

Die ganze Palette eben ..
08/23/2007 19:01 pengpong#8
probier's mal mit
#define _WIN32_WINNT 0x0501
bevor du die windows.h includest
08/23/2007 21:43 Term!nX#9
Die Funktion tut zwar ihren Dienst, aber bringt leider nichts für Guild Wars. Hab mal in den AutoIt Foren gefragt, wie die au3 Send("string") Funktion funktioniert. Hoffe die könnens mir verraten :P
08/27/2007 14:15 Ganf#10
Hmm, scgau mal, der Source von AutoHotKey is auf auf der Seite, schau dir mal dort vl das an, da ich glaube, dass es imgrunde fast das gleiche ist!


[Only registered and activated users can see links. Click Here To Register...]



Ganfi
08/29/2007 02:58 emjay#11
probier mal den scancode noch zuzuweisen... hatte mal eine ältere anwendung die ohne scancodes einfach nicht korrekt die keys annehmen wollte.

evtl. bringt dich ja mein alter (sorry nur delphi) code noch auf die richtige fährte, der weg sollte auf jeden fall der richtige sein

[Only registered and activated users can see links. Click Here To Register...]
08/29/2007 07:50 Term!nX#12
Okay. Also ich muss nen Hardwarescan machen, werd mir mal anschauen wies geht, könnte sein dass ich kleine Tipps brauche :)

Danke für den Code, schau ihn mir heute mittag an.