moin.
jeder hat sicherlich schonmal bemerkt, dass man die tastatur unter windows auf europäisch umstellen kann, und damit ein Y zu einem Z wird, und andersrum.
ich möchte nun ein programm schreiben, welches die tastatureingaben beliebig manipuliert.
also wenn ich ein B drücke, soll ein CCC erscheinen, global natürlich.
die ersten schritte bin ich schon mit dem thread
Programm reagiert nach einer Zeit nicht mehr auf Tastatureingaben
gegangen.
damit kann ich überprüfen, ob eine bestimmte taste gedrückt (hier nur losgelassen) wurde.
jetzt möchte ich gerne diese eingabe verwerfen,
und stattdessen C C C in den tasturbuffer schreiben, oder ans system senden, oder wie auch immer.
so dass jede application dies für bare münze nimmt, und entsprechend reagiert.
schließt sich ein fokussiertes programm bspw. durch drücken von ALT+x
so möchte ich bei einem gedrückten x (Alt + x) ans system übergeben, und damit die application schließen.
meine fragen sind also
die 2. frage sollte wohl eher hinten anstehen, da man selbst mit 300+ tastaturanschlägen pro sekunde nur jede 30ms eine taste drückt, und das system wohl in 5ms mit den eingaben fertig ist.
mfg
JLafleur
moin, oder besser guten abend =)
ich habe mir mal eine Eingabetastatur gebastelt. und dabei war es oftmals notwendig die Shift-Taste zu drücken bzw. loszulassen. und dafür habe ich dieses Codestück verwendet. Damit kannst du die Tasten drücken bzw loslassen.
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);
const int KEYEVENTF_EXTENDEDKEY = 0x1;
const int KEYEVENTF_KEYUP = 0x2;
keybd_event((byte)Keys.ShiftKey, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr)0); //Shift-Taste drücken
keybd_event((byte)Keys.ShiftKey, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr)0); //Shift-Taste los lassen
zu punkt zwei:
Ob das Event auch durch das hier ausgelöst wird kann ich dir nicht genau sagen, da ich es nicht getestet habe.
Falls es immer ausgelöst wird, so kannst du dir ja einfach merken wenn ein User eine Taste drückt, dann weisst du was darauf folgt.
Wenn der User z.B. A drückt dann weisst du genau, dass durch dein Programm nun drei weitere A folgen.
mfg
MichlG
moin moin;
also so recht schlau werd ich aus deinem code net....
wie soll ich den denn verwenden?
du hast quasi key-datas deklariert, die also eine gedrückte oder losgelassene shift-taste darstellen.
wenn ich das richtig verstanden habe, müsste ich die per SendKey senden - oder?
um mal den praktischen grund für dieses experiment zu nennen (man kann es nat. auch auf sämtliche andere probleme anwenden)
need for speed pro street *fg
man muss bei der manuellen schaltung erst kuppen (gedrückt halten) dann schalten (hoch oder runter) dann die kupplung loslassen.
mein ziel ist es nun, aus K (kuppen)(gedrückt halten) + H (hochschalten drücken) + K(kuppeln loslassen)
nur ein H zu bauen - also hochschalten, das programm erkennt dass hochgeschaltet werden soll, sendet also ein gedrücktes K (kuppeln) ein gepresstest H (drücken, loslassen) und ein losgelassenes K (kuppeln).
ich weiß, für n doofes spiel n bissl viel aufwand, aber generell hab ich mich eh schon immer gefragt wie globale keys funktionieren.
also das allseits bekannte strg+alt+entf oder auch windows-taste+pause.
sowas einbauen zu können ist sicherlich nie verkehrt....
wobei ich da noch ne frage hätte.....
nehmen wir mal 2 programme A und B
das eine ist ein..... druckprogramm, was bei.... strg+p den aktuellen screen druckt.
das andere ist ein musikprogramm, nennen wir es mal WUNamp 😜
das bei strg+S das aktuelle stück stoppt.
in dem oben angebgen thread wird der fokus auf das programm gelegt,
also alle tastatureingaben gehen zuerst an das programm.
soweit erstmal nicht schlimm, vll (ich hoffe es doch) werden ja die nicht matchenden tastaturfolgen einfach im raume stehen gelassen, und andere programme können sich "bedienen".
wie sieht es aber aus, wenn WUNamp nun durch strg+p die playlist einblenden soll?
also 2 identische tastaturfolgen von 2 verschiedenen programmen benutzt werden?
und vll zusätzlich windows (ich weiß es grad net) ebenfalls bei strg+p z.b..... Paint öffnen soll?
fragen über fragen 🙂
ich werde nu erstmal.... gleich.... also... nicht jetzt... sondern.... halt später....
schlafen gehen 🙂
JL