Ich glaube, Sie am besten dran sein werden, wenn Sie die GetKeyboardState API-Funktion verwenden.
[DllImport ("user32.dll")]
public static extern int GetKeyboardState(byte[] keystate);
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
byte[] keys = new byte[256];
GetKeyboardState (keys);
if ((keys[(int)Keys.Up] & keys[(int)Keys.Right] & 128) == 128)
{
Console.WriteLine ("Up Arrow key and Right Arrow key down.");
}
}
Im KeyDown-Ereignis fragen Sie einfach nach dem "Status" der Tastatur. GetKeyboardState füllt das von Ihnen angegebene Byte-Array und jedes Element in diesem Array stellt den Status eines Schlüssels dar.
Sie können auf jeden Keystate zugreifen, indem Sie den numerischen Wert jedes virtuellen Tastencodes verwenden. Wenn das Byte für diese Taste auf 129 oder 128 gesetzt ist, bedeutet dies, dass die Taste gedrückt ist. Wenn der Wert für diese Taste 1 oder 0 ist, ist die Taste gedrückt (nicht gedrückt). Der Wert 1 ist für den umgestellten Zustand des Schlüssels gedacht (z. B. Feststelltaste).
Für Details siehe Microsoft documentation for GetKeyboardState.
Mit @JamesBarrass nähern können Sie Strg + Letter X + Letter Y haben: http://stackoverflow.com/questions/11157868/capturing-ctrl-multiple-key-downs –