ERLEDIGT
JA
JA
ANTWORTEN
3
3
ZUGRIFFE
968
968
EMPFEHLEN
-
Hallo,
ich versuche die Eingabe der Tastaur auszulesen hab dabei aber meine schwierigkeiten und das was ich im Internet gefunden habe (das war einiges) hat mir leider nicht geholfen. Die dortigen Lösungen haben bei mir alle nicht funktioniert. Die beisten bassieren ja auf der KeyEventArgs Klasse aber bei funktioniert einfach nichts. Kann es vielleicht daran liegen das ich keine Form habe? Also ich hab ein neues Projeckt erstellt (WIndows-Forms) aber habe dann die Datei Form.cs gelöscht. Funktioniert es deshalb vielleicht nicht? Wenn ich das über GetKeyState mache funktioniert es so wie es soll aber ich hab momentan für jede einzelne Taste eine eigene if abfrage das kann es doch nicht sein? Außerdem werden zb das numb-pad ignoriert? Wär super wenn ihr mir helfen könnt.
Grüße cantharis
-
13.01.10 22:56 #2
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Hi.
Wenn du keine Form mehr hast im WindowsForms Projekt.. womit arbeitest du denn dann?
Willst du globale Tastaturereignisse abfragen? Also egal wo diese stattfinden?
Dann wären da 2 Artikel die du interessant finden könntest:
Global Mouse and Keyboard Library
Processing Global Mouse and Keyboard Hooks in C#
lg,..With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
Also ich hab jetzt auf deinen Tipp hin mal ein bisschen nach Hooks gesucht und das gefunden:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
using System; using System.Diagnostics; using System.Windows.Forms; using System.Runtime.InteropServices; class InterceptKeys { private const int WH_KEYBOARD_LL = 13; private const int WM_KEYDOWN = 0x0100; private static LowLevelKeyboardProc _proc = HookCallback; private static IntPtr _hookID = IntPtr.Zero; public static void Main() { _hookID = SetHook(_proc); Application.Run(); UnhookWindowsHookEx(_hookID); } private static IntPtr SetHook(LowLevelKeyboardProc proc) { using (Process curProcess = Process.GetCurrentProcess()) using (ProcessModule curModule = curProcess.MainModule) { return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0); } } private delegate IntPtr LowLevelKeyboardProc( int nCode, IntPtr wParam, IntPtr lParam); private static IntPtr HookCallback( int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN) { // this doesn't work for me int vkCode = Marshal.ReadInt32(lParam); MessageBox.Show(vkCode.ToString()); } return CallNextHookEx(_hookID, nCode, wParam, lParam); } [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool UnhookWindowsHookEx(IntPtr hhk); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr GetModuleHandle(string lpModuleName); }
Zwei Probleme habe ich damit, erstens Verstehe ich den Code nicht so ganz :\ und zweitens, wenn man eine Taste drückt würd immer die "Zahl" dafür ausgegeben und ich würde aber gene den Namen also zb "Esc" oder "G" geliefert bekommen.
-
14.01.10 15:53 #4
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Warum benutzt nicht einfach eine der von mir genannten Bibliotheken bzw. deren Sourcecode..?
Aber du kannst einfach den Wert von vkCode in einen Keys Wert umwandeln:
Code csharp:1
Keys k = (Keys) vkCode;
k.ToString() würde dann z.b. Escape liefern, und du könntest einfach mit anderen Keys Werten vergleichen.With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
Ähnliche Themen
-
Sondertasten auf Tastatur abfragen
Von fredlllll im Forum Visual Basic 6.0Antworten: 4Letzter Beitrag: 04.03.09, 13:45 -
MySQL Abfragen zu Access Abfragen umwandeln?
Von Falconbase im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 16.04.06, 15:34 -
Tastatur
Von Dj-KaNiNcHeN im Forum JavaAntworten: 5Letzter Beitrag: 25.05.04, 01:48 -
tastatur?
Von vato im Forum PhotoshopAntworten: 6Letzter Beitrag: 20.04.02, 14:13





Zitieren

Login





