Autor |
Beitrag |
Baenky
Hält's aus hier
Beiträge: 6
|
Verfasst: Mo 14.07.08 13:30
Hallo zusammen,
ich möchte mein Formular, das im System-Tray liegt, gerne auf Doppel-Druck von Alt GR oder einer anderen Taste anzeigen lassen.
Mit generellen Tastenkombinationen wie z.B. Strg + Shift + A ist es kein Problem - das klappt... aber ich hätte das gerne auch bei doppeltem Drücken einer Taste, damit man nicht mehrere Tasten nacheinander - womöglich noch mit zwei Händen - drücken muss...
Ist das überhaupt möglich?
Würde mich freuen, wenn jmd. hierzu eine Idee hat;-)
Gruß
Nadine
|
|
bakachan
      
Beiträge: 503
Erhaltene Danke: 34
W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
|
Verfasst: Mo 14.07.08 13:55
Naja da du ja das abfragen von gedrückten Tasten schon hast musst du ja nur noch das doppelt drücken umsetzen, z.B. indem du immer wenn die Taste gedrückt wird Zählvariable erhöst und von einem Timer nach einem bestimmten Intervall wieder auf 0 setzten lässt. (Wenn die Taste zum zweiten mal gedrückt wird bevor das Intervall abgelaufen ist erkennst du das an deiner Zählvariablen.)
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mo 14.07.08 13:58
Ich würde beim Tastendruck einfach DateTime.Now in einem Feld speichern und damit überprüfen, wie viel Zeit seit dem letzten Aufruf vergangen ist.
|
|
Baenky 
Hält's aus hier
Beiträge: 6
|
Verfasst: Mo 14.07.08 14:00
Hallo,
vielen Dank für die Anregungen.
Werde ich mal ausprobieren!
Gruß
Nadine
|
|
Baenky 
Hält's aus hier
Beiträge: 6
|
Verfasst: Mi 16.07.08 12:53
Ich habe nun leider folgende zusätzliche Problematik:
Da meine Form-Anwendung im SysTray liegt, kann ich keine normalen KeyEvents verwenden - diese werden nicht registriert, da das Form nicht aktiv ist.
Wie bereits erwähnt, hatte ich hierfür eine Lösung.
Uns zwar habe ich eine Funktion register Hotkey verwendet:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk); ... if (RegisterHotKey(this.Handle, HOTKEY_ID, (uint)(Modifiers.Shift | Modifiers.Control), (uint)Keys.A) == false) |
Funktioniert prinzipiell gut. Leider unterstützt die Funktion aber nur min. 2 Tasten für eine Kombination, nicht weniger - was ich brauche, wäre aber eine Reaktion auf eine Taste!
Sehe ich das so richtig?
Falls ja, wie reagiere ich in einer SysTray-Anwendung auf eine Taste? Evtl. ist es ja auch viel einfacher, als ich denke?
Gruß
Nadine
|
|
bakachan
      
Beiträge: 503
Erhaltene Danke: 34
W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
|
Verfasst: Mi 16.07.08 13:33
Dein RegisterHotkey funktioniert über die WinAPI und darüber müsste es auch eine KeyDown oder KeyPress Variante geben, musst im Internet mal ein bischen suchen. (Stichwörter z.B. WinAPI+KeyPress)
|
|
Baenky 
Hält's aus hier
Beiträge: 6
|
Verfasst: Mi 16.07.08 14:01
Ok... dann suche ich mal.
Wäre ja super, wenn es da was gibt!
Gruß
Nadine
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mi 16.07.08 18:28
Mit einem Hotkey kommst du hier nicht weiter, das nächstmächtigere Werkzeug wäre ein Journal Hook, mit dem du jeden Tastendruck im gesamten System abfangen kannst.
|
|
Baenky 
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 17.07.08 14:19
Hallo,
also etwas vergleichbares wie KeyPress scheint es in der win32Api nicht zu geben. Ihc kann höchstens einen Key-Status abfragen, was mir aber für meine Tray-Applikation nichts bringt.
Auf Hooks bin ich jetzt schon mehrmals gestoßen... damit muss ich mich aber erstmal auseinander setzen - da gibt es einiges zu beachten.
Würde es mir etwas bringen, wenn ich einen Dienst schreibe, der dann auf Tastendruck mein Form aufruft und es auf Esc wieder ausblendet?
Könnte ich den Tastendruck in einem Dienst irgendwie besser/einfacher abfangen und müsste so keine Tray-App verwenden?
Gruß
Nadine
|
|
bakachan
      
Beiträge: 503
Erhaltene Danke: 34
W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
|
Verfasst: Do 17.07.08 14:40
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Do 17.07.08 14:46
Mit dem richtigen Wrapper ist ein Keyboard Hook nicht schwieriger als ein Hotkey  .
[edit]Gnaaa...  [/edit]
|
|
Baenky 
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 17.07.08 15:09
Vielen Dank für die Links/den Link (war der selbe)!
Werde ich mir zu Gemüte ziehen...
Ich denke, ich stelle mir das ganze einfach mal wieder viel zu kompliziert vor und habe mich einfach mit Hooks noch nie auseinandergesetzt bisher - also, wenn das so einfach wie das Arbeiten mit Hotkeys ist, sollte ich das wohl irgenwie hingebkommen
Gruß
Nadine
|
|