Autor |
Beitrag |
Ccenter
      
Beiträge: 154
Win7
C#
|
Verfasst: Mo 07.12.09 20:24
Hallo,
ich probiere gerade einwenig mit Tastaturevents herrum und bin dabei auf ein Problem gestoßen.
Ich habe meine Form auf Visible = false gesetzt und einen Icon in die Systemtray gelegt.
Natürlich kann die Form während man z.B. gerade im Internet ist, kein Tastaturevent abfangen da sie nicht den Focus hat.
Gibt es irgendwie eine Möglichkeit, trotzdem das Tastaturevent abzufangen ?
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Mo 07.12.09 23:01
Da müßtest du einen Tastatur Shortcut in Windows registrieren. Mir ist aber kein Weg mit .NET Mitteln bekannt.
Da mußt du wohl auf die klassische WinApi (im speziellen RegisterHotKey) ausweichen.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 07.12.09 23:05
Ich mag bei solchen Sachen das Managed WinAPI-Projekt, welches unter anderem auch eine Hotkey-Klasse hat 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Ccenter 
      
Beiträge: 154
Win7
C#
|
Verfasst: Di 08.12.09 16:01
Ok danke. Verzeit mir diese blöde Frage aber wie bekomme ich die DLL etc nun in mein Visual Studio?
Die Hilfsdatei die dabei war, funktioniert nämlich irgendwie nicht.
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Di 08.12.09 16:32
Wie sonst auch: DLL sinnvoll speichern, im Projekt Referenz hinzufügen, DLL auswählen, je nach Situation auch ins Ausgabeverzeichnis kopieren lassen. Jürgen
|
|
Ccenter 
      
Beiträge: 154
Win7
C#
|
Verfasst: Fr 29.01.10 15:02
so, hab mich entschlossen mit dem Thema weiter zu machen.
Allerdings hab ich gerade ein Problem mit der DLL. Ich habe sie unter Projekt-> Verweis hinzufügen, hinzugefügt. Sie erscheint jetzt auch im Projektmappen Explorer aber ich kann die Befehle und Events aus der Datei nicht benutzen da die Befehle nicht erkannt werden. Ausserdem erscheint im Code auch kein Verweis bei Using.
Muss ich noch irgendetwas anderes machen?
|
|
Ccenter 
      
Beiträge: 154
Win7
C#
|
Verfasst: Sa 30.01.10 20:32
Ok, Problem wegen dll gelöst
So, ich habe mir in der Hilfedatei jetzt mal die Klasse Hotkey angeguckt. Ich weiß aber leider nicht wie ich jetzt eine Tastenkombination deklarieren soll. So is ja falsch:
C#-Quelltext 1: 2: 3: 4: 5:
| private void Form1_Load(object sender, EventArgs e) { Hotkey hk1 = new Hotkey(); hk1.KeyCode = Keys.C + Keys.V; } |
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: So 31.01.10 01:58
C+V? Warum keine gewöhnliche Kombination mit Strg etc., wie es Hotkey von sich aus unterstützt?
_________________ >λ=
|
|
Ccenter 
      
Beiträge: 154
Win7
C#
|
Verfasst: So 31.01.10 12:49
Das war ja nur ein Beispiel. Der Syntax ist in diesem Fall einfach falsch. Ich bekomme ja die gleiche Fehlermeldung wie vorher wenn ich nun diesen Code verwende:
C#-Quelltext 1: 2:
| Hotkey hk1 = new Hotkey(); hk1.KeyCode = Keys.Control + Keys.A; |
Die Meldung ist diese: Der Operator "+" kann nicht auf Operanden vom Typ "System.Windows.Forms.Keys" und "System.Windows.Forms.Keys" angewendet werden.
Ich bin mir nichtmal sicher ob ich meine Tastenkombination wirklich richtig zuweise. In der "Hilfedatei" ist nämlich weder ein Codebeispiel noch eine Erklärung hierzu vorhandenn.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 31.01.10 12:55
Ich glaube aber nicht, dass das bei einem Hotkey wirklich Sinn macht. Die sind ja meist eine Kombinatino aus Strg/Alt/Shift/Windows (dafür hat die Hotkey-Klasse entsprechende Eigenschaften) plus einer "normalen" Taste, die steckt man in die KeyCode-Eigenschaft.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Ccenter 
      
Beiträge: 154
Win7
C#
|
Verfasst: So 31.01.10 13:13
Ich versteh zwar was du meinst aber ich kann das nicht richtig umsetzen, kann mir bitte jemand dafür ein Codebeispiel geben?
Der Teil wird ja schonmal richtig sein:
C#-Quelltext 1:
| Hotkey hk1 = new Hotkey(); |
Aber ich bekomme es nicht hin, hk1 eine Tastenkombination zuzuteilen.
Eine Taste klappt ja:
C#-Quelltext
Aber sobald ich versuche eine 2. Taste mit ins Spiel zu bringen, klappt es bei mir nicht mehr.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 31.01.10 13:21
Jetzt brauchst Du noch eine Taste wie Shift / Strg / etc. Ich schrieb ja, dass es dazu entsprechende Eigenschaften beim HotKey gibt.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: So 31.01.10 13:47
Zitat: | Aber sobald ich versuche eine 2. Taste mit ins Spiel zu bringen, klappt es bei mir nicht mehr. |
Ich kenne die HotKey Klasse nicht aber vermutlich hat die eine ~Modifier~ Property über die man Ctrl/Shift/Alt setzen kann. Falls nicht Keys ist ein Flags Enum (damit quasi ein BitField) und Elemente darin werden somit nicht addiert sondern eben über binäre Operatoren kombiniert. Um mehrere Keys darzustellen mußt du die also verodern.
C#-Quelltext 1:
| hk1.KeyCode = Keys.Control | Keys.A; |
Das macht beim Aufbau von Keys aber nur Sinn in der Form ModifierKey | Buchstabe. Buchstabe | Buchstabe ergibt Unsinn. In Keys sind die Buchstaben mit einem Bitmuster entsprechend ihrem ASCII Wert dargestellt. Dein ursprünglich gewünschtet C + V würde, falls ich richtig geguckt habe, W ergeben.
|
|
Ccenter 
      
Beiträge: 154
Win7
C#
|
Verfasst: So 31.01.10 14:32
Ok Danke.
Eine Fehlermeldung bekomme ich schonmal nicht mehr.
Innerhalb der Form gibt es ja das Event KeyDown/Keypress, ich möchte das ja aber ausserhalb der Form verwenden.
Ich hab gesehen das es das Event "HotkeyPressed" gibt. Wie verwende ich das nun ohne die Form einbeziehen zu müssen/ausserhalb der Form?
Mit Form wäre es ja z.b. so:
C#-Quelltext 1: 2: 3: 4:
| private void Form1_HotkeyPressed(object sender, EventArgs e) { } |
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: So 31.01.10 14:42
Hat die HotKey Klasse keinen entsprechenden Event (oder zumindest eine Doku)?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 31.01.10 15:58
Hallo!
Schreib mal
C#-Quelltext
dann sollte Dir der Editor durch zweimaliges Drücken der Tab-Taste die Zuweisung "bauen" und auch direkt die Methode anlegen.
Grüße
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Ccenter 
      
Beiträge: 154
Win7
C#
|
Verfasst: So 31.01.10 16:37
C#-Quelltext 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:
| using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using ManagedWinapi;
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e) { Hotkey hk1 = new Hotkey(); hk1.KeyCode = Keys.Control | Keys.A; hk1.HotkeyPressed += new EventHandler(hk1_HotkeyPressed); }
void hk1_HotkeyPressed(object sender, EventArgs e) { MessageBox.Show("funktioniert"); } } } |
Egal ob ich die Form nun focusiert habe oder nicht, es passiert nichts wenn ich strg + a drücke. Wodran könnte das liegen?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 31.01.10 16:47
Ist das wirklich zuviel verlangt, dass Du Dir mal selber die Eigenschaften der Hotkey-Klasse anguckst?
Da gibt es z.B. die Eigenschaft Enabled.
Und wie oft soll ich noch sagen, dass die Hotkey-Klasse für Shift / Ctrl / etc. eigene Eigenschaften hat? Ich habe langsam keine Lust mehr ...
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Ccenter 
      
Beiträge: 154
Win7
C#
|
Verfasst: So 31.01.10 17:35
Natürlich ist es nicht zuviel verlangt.
Allerdings verstehe ich nicht ganz was du mit eigene Eigenschaften für strg etc meinst bzw. wie ich die verwenden soll.
Ausserdem wo soll ich mir denn bitte die Hotkey Klasse angucken?
Der Hilfedatei die bei ManagedWinapi beliegt, kann ich nicht viel entnehmen.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 31.01.10 17:49
- Es reicht doch, im Editor hk1. einzugeben und dann mal in der Liste zu gucken, welche Eigenschaften es gibt.
- Was könnte wohl eine Eigenschaft hk1.Ctrl vom Typ Bool machen? So ganz ohne Doku kann man da schon ganz gut raten. Wenn man dann mal hier nachschaut, steht da sogar
Zitat: | Whether the shortcut includes the Control modifier. |
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|