26. Februar 2012

C# Keyboard Delay ändern

26. Februar 2012 - Geschrieben von Martin - Keine Kommentare

Der Keyboard Delay ist die kurze Verzögerung zwischen drücken und halten einer Taste, bis das System akzeptiert das die Taste gehalten wird und das Signal weitergibt.

Das kann zu Problem führen, wenn man wie ich ein Spiel programmieren möchte, welches per halten einer Taste sofort eine Aktion ausführen soll, und nicht erst nach ein paar hundert Millisekunden. Deshalb ändern wir die Property KeyboardDelay auf 0. Leider ist diese via „SystemInformation.KeyboardDelay“ nur Lesbar, deshalb lösen wir das ganze über einen Win32 API Call.

Dazu fügen wir zu unserem Projekt folgendes using hinzu, um DLLs einbinden zu können:

using System.Runtime.InteropServices;

nun gehen wir an den Anfang unserer Klasse und fügen folgendes hinzu um die „user32.dll“ zu laden und als Einstiegspunkt legen wir „SystemParametersInfo“ fest.

[DllImport("user32.dll", EntryPoint = "SystemParametersInfo", SetLastError = true)]

danach binden wir die Methode „SystemParametersInfoSet“ aus der DLL ein:

public static extern bool SystemParametersInfoSet(uint action, int param, int vparam, uint init);

Nun suchen wir uns bei MSDN die IDs der Propertys raus, welche wir ändern wollen. Dann brauchen wir noch „SPIF_SENDCHANGE“ mit der ID 2 um die Änderungen ins Profil schreiben zu können.
Hierzu legen wir uns 2 Konstanten an:

const uint SPI_SETKEYBOARDDELAY = 23;
const uint SPIF_SENDCHANGE = 2;

Jetzt können wir mit folgendem Methodenaufruf den KeyboardDelay ändern:

int newDelay = 0;
SystemParametersInfoSet(SPI_SETKEYBOARDDELAY, newDelay, 0, SPIF_SENDCHANGE);

UND BITTE vergesst nicht vorher den aktuellen Wert mit „SystemInformation.KeyboardDelay“ auszulesen und wegzuspeichern, damit ihr ihn beim schließen des Programms wiederherstellen könnt!

Schreibe einen Kommentar