Laden...

[gelöst] Tastenabfrage mit GetKeyboardState

Erstellt von TheWhiteShadow vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.142 Views
T
TheWhiteShadow Themenstarter:in
5 Beiträge seit 2010
vor 13 Jahren
[gelöst] Tastenabfrage mit GetKeyboardState

Hallo,

Ich will in einer Form-Anwendung den Zustand von einigen Tasten abfragen.
Dazu hab ich mit diesen Thread gedrückte Tasten ohne KeyUp/KeyDown ermitteln angesehen und von der dort verlinkten Seite den Beispielcode genommen.
Aber ich bekomm immer ein Fehler:

Der Zugriff auf "System.Drawing.NativeMethods" ist aufgrund der Sicherheitsebene nicht möglich.

Ich weiß nicht einmal was "NativeMethods" überhaupt ist.

S
248 Beiträge seit 2008
vor 13 Jahren

Hallo,

im Beispiel-Code wurde eine importierte Win32 Funktion verwendet (diese steht oben auf der verlinkten Seite).

Erstelle folgende Klasse in deinem Projekt:

internal static class NativeMethods
{
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool GetKeyboardState(byte [] lpKeyState);
}

Ggf musst du noch auf Namespaces aufpassen.
Zu beachten ist, dass das zu übergebende Array 256 bytes groß sein muss; kannst du ggf nach durch eine Wrapperfunktion in der statischen Klasse sicherstellen.

spooky

T
TheWhiteShadow Themenstarter:in
5 Beiträge seit 2010
vor 13 Jahren

Die Dll-Funktion hab ich importiert. Hab mir auch gedacht, dass ich das ganze auch in einer Klasse unterbringen muss. Hatte zuerst meine Formklasse benutzt, da hatte es auch nicht geklappt. Jetzt weiß ja auch woher NativeMethods kommt, aber wozu brauch ich eine extra Klasse?

Außerdem bekom ich immernoch ein Error. Nur nicht mehr für den System.Drawing-Space sondern für meine erstellte NativeMethods-Klasse.

Das ganze ist im selben Namespace und das Array ist 256 bytes, weil ich ja am Beispiel nichts geändert hab.

Edit: Ich hab es jetzt gelöst.
Hab die DLL-Einbindung jetzt in der Keyboard gepackt.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo TheWhiteShadow,

auch wenn du das Problem schon gelöst hast, hier noch der Vollständigkeit wegen:

Der Zugriff auf "System.Drawing.NativeMethods" ist aufgrund der Sicherheitsebene nicht möglich.

"Sicherheitsebene" bezieht sich auf die Zugriffsmodifier private, protected, ...

Aber mit [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen) leicht selbst zu finden und zu lösen. Beachte von daher bitte auch [Hinweis] Wie poste ich richtig? Punkt 1.1 und 1.1.1.

herbivore