Forums Neueste Beiträge
 

Taste mit keybd_events "halten"

05/06/2008 - 21:42 von Christof Rueß | Report spam
Hallo NG,

Ich möchte mit meinem Programm Tastatureingaben simulieren.
Dazu gehört auch, dass Tasten gehalten werden müssen.

Für die Simulation verwende ich keybd_event aus der user32.dll:

[DllImport("user32.dll")]
public static extern void keybd_event(Keys bVk, byte bScan,
KeyboardEventFlags dwFlags, UIntPtr dwExtraInfo);

public enum KeyboardEventFlags {
KEYDOWN = 0,
KEYUP = 2
}

Es soll z.B. die Cursor-Up-Taste gehalten werden.
Ich kannte es von "früher", dass man einfach das Event mit KEYDOWN auslöst,
also:

keybd_event(Keys.Up, 0, KeyboardEventFlags.KEYDOWN, UIntPtr.Zero);

Loslassen der Taste dann mit KeyboardEventFlags.KEYUP.

So die Theorie - in der Praxis wird die Zeichenwiederholung (wie wenn man
auf der Tastatur lànger auf eine Taste drückt) nicht aktiv.

Kann man das irgendwie herbeiführen?

Mit einem Timer könnte ich den Tastendruck zwar mehrfach hintereinander
auslösen, um das geht es aber nicht - die "virtuelle" Taste soll ja einfach
gehalten werden...

Viele Grüße

Chris
http://www.hobbyelektronik.org
Achtung: Die E-Mail-Adresse im From: ist ungültig
Verwendet chris at hobbyelektronik punkt org
 

Lesen sie die antworten

#1 Gregor Biswanger
06/06/2008 - 06:58 | Warnen spam
Guten Morgen,

warum benutzt du nicht SendKeys wie es das Framework anbietet?

weitere Infos:
http://msdn.microsoft.com/en-us/library/8c6yea83(VS.85).aspx
http://msdn.microsoft.com/de-de/library/ms171548(VS.80).aspx

und hier gibt es eventuell einen fertiges command um eine Taste auch noch
gedrückt zu halten. Im schlimmstenfalle eine Schleife herumbauen aber Timer?

Viele Grüße

Gregor



INdotNET - Ingolstàdter .NET Developers Group - http://www.indot.net


"Christof Rueß" wrote:

Hallo NG,

Ich möchte mit meinem Programm Tastatureingaben simulieren.
Dazu gehört auch, dass Tasten gehalten werden müssen.

Für die Simulation verwende ich keybd_event aus der user32.dll:

[DllImport("user32.dll")]
public static extern void keybd_event(Keys bVk, byte bScan,
KeyboardEventFlags dwFlags, UIntPtr dwExtraInfo);

public enum KeyboardEventFlags {
KEYDOWN = 0,
KEYUP = 2
}

Es soll z.B. die Cursor-Up-Taste gehalten werden.
Ich kannte es von "früher", dass man einfach das Event mit KEYDOWN auslöst,
also:

keybd_event(Keys.Up, 0, KeyboardEventFlags.KEYDOWN, UIntPtr.Zero);

Loslassen der Taste dann mit KeyboardEventFlags.KEYUP.

So die Theorie - in der Praxis wird die Zeichenwiederholung (wie wenn man
auf der Tastatur lànger auf eine Taste drückt) nicht aktiv.

Kann man das irgendwie herbeiführen?

Mit einem Timer könnte ich den Tastendruck zwar mehrfach hintereinander
auslösen, um das geht es aber nicht - die "virtuelle" Taste soll ja einfach
gehalten werden...

Viele Grüße

Chris
http://www.hobbyelektronik.org
Achtung: Die E-Mail-Adresse im From: ist ungültig
Verwendet chris at hobbyelektronik punkt org



Ähnliche fragen