Hallo,
(Kurzfassung bzw. grundlegende Frage in Fettdruck weiter unten)
ich möchte gerne in meiner Anwendung ein HOTKEY registrieren und habe dafür via StackOverlflow schon ca. 4 verschiedene Beispiele ausprobiert.
Randfrage: Die meisten Klassen, die ich von dort weghole, haben irgendwelche Fehler, wo ich nicht verstehe, wieso die dort gepostet werden unter LÖSUNG, als ob sie funkionieren müssten?!
Ich benutze Visual Studio 2019 Community und frage mich dabei, ob diese Version vielleicht irgendwie abgespeckt ist, fehlen da vielleicht irgendwelche Funktionen in der Library?
Also z.B.
System.Windows.Input -> KeyGestureConverter
Fehlt bei mir
Laut MSDN soll diese besagte Klasse "KeyGestureConverter" in der System.Windows.Input enthalten sein, bei mir ist dies nicht der Fall.
So kommt es, dass ein angeblich funktionieren sollendes Beispiel bei mir unter solchen Punkten rot unterstrichen ist und ich weiß nicht mehr, was ich noch machen soll, um ein solchen Code zum laufen zu bekommen.
Das einzige funktionierende Beispiel, was ich gefunden habe, was bei mir funktioniert, registriert außgerechnet nur eine einzige HOTKEY-Taste, die [F9] und ich kann in diesem Beispiel nicht übertragen, wie das mit einer Tastenkombination STRG+ALT+H funktionieren würde.
Mir fehlt dafür irgendwie das Verständnis, wie ich aus diesem STRG+ALT+H einen IntegerWert bekomme...
Das ENUM (None = 0, Alt = 1, Control = 2, Shift = 4, WinKey = 8) dazu ist mir zwar bekannt, aber ich kann es leider nicht übertragen, weil ich ich keine passenden Beispiele finde, auf die ich das rückschließen kann, die auch bei mir im Studio funktionieren.
Es gibt dazu auch noch eine solche Formulierung:
0101 (Binary) bzw. 0x0101, aber wo ist dann da die H Taste?!
Es gibt andere Varianten als diese (siehe unten), wo man mit Übergeben von den zusätzlich gedrückten Tasten registrieren kann:
wobei hook eine mitgelieferte Klasse ist, die ich dafür auch eingebunden hatte.
Er kennt aber diese "ModifierKeys" so nicht, bzw. erwartet eine Umwandlung von mir, die ich nicht verstehe. (Stichwort Casting), darum hab ich dieses Beispiel erstmal wieder verworfen, weil ich den Code garnicht kompiliert bekomme.
Hier mal die komplette Klasse der Form1, die ausschließlich eine F9-Taste anhand eines Integers registriert (siehe unten)
Das funktioniert bei mir - zum nachstellen muss man das Event Form1_Load noch im XML der FORM1 eintragen, sonst wird das nicht eingebunden...
Anhand dieser Information : None = 0, Alt = 1, Control = 2, Shift = 4, WinKey = 8
muss nun dieser Integerwert weiter unten angepasst werden, aber ich weiß einfach nicht wie. :-(
Festgelegt wird die F9 - Taste an dieser Stelle:
int HotKeyCode = (int)(Keys.F9);
Kann jemand dieses Beispiel für folgende Tastenkombinationen umformulieren?
STRG + ALT + H
(oder)
STRG + H
(oder)
ALT + H
Ich bräuchte einfach ein paar Beispiele, um das zu verstehen.
Hier das dazu von allen anderen Klassen unabhängige funktionierende Script zur Registrierung der Taste [F9]
(Kurzfassung bzw. grundlegende Frage in Fettdruck weiter unten)
ich möchte gerne in meiner Anwendung ein HOTKEY registrieren und habe dafür via StackOverlflow schon ca. 4 verschiedene Beispiele ausprobiert.
Randfrage: Die meisten Klassen, die ich von dort weghole, haben irgendwelche Fehler, wo ich nicht verstehe, wieso die dort gepostet werden unter LÖSUNG, als ob sie funkionieren müssten?!
Ich benutze Visual Studio 2019 Community und frage mich dabei, ob diese Version vielleicht irgendwie abgespeckt ist, fehlen da vielleicht irgendwelche Funktionen in der Library?
Also z.B.
System.Windows.Input -> KeyGestureConverter
Fehlt bei mir
Laut MSDN soll diese besagte Klasse "KeyGestureConverter" in der System.Windows.Input enthalten sein, bei mir ist dies nicht der Fall.
So kommt es, dass ein angeblich funktionieren sollendes Beispiel bei mir unter solchen Punkten rot unterstrichen ist und ich weiß nicht mehr, was ich noch machen soll, um ein solchen Code zum laufen zu bekommen.
Das einzige funktionierende Beispiel, was ich gefunden habe, was bei mir funktioniert, registriert außgerechnet nur eine einzige HOTKEY-Taste, die [F9] und ich kann in diesem Beispiel nicht übertragen, wie das mit einer Tastenkombination STRG+ALT+H funktionieren würde.
Mir fehlt dafür irgendwie das Verständnis, wie ich aus diesem STRG+ALT+H einen IntegerWert bekomme...
Das ENUM (None = 0, Alt = 1, Control = 2, Shift = 4, WinKey = 8) dazu ist mir zwar bekannt, aber ich kann es leider nicht übertragen, weil ich ich keine passenden Beispiele finde, auf die ich das rückschließen kann, die auch bei mir im Studio funktionieren.
Es gibt dazu auch noch eine solche Formulierung:
0101 (Binary) bzw. 0x0101, aber wo ist dann da die H Taste?!
Es gibt andere Varianten als diese (siehe unten), wo man mit Übergeben von den zusätzlich gedrückten Tasten registrieren kann:
PHP Code:
hook.RegisterHotKey(ModifierKeys.Control | ModifierKeys.Alt, Keys.H);
Er kennt aber diese "ModifierKeys" so nicht, bzw. erwartet eine Umwandlung von mir, die ich nicht verstehe. (Stichwort Casting), darum hab ich dieses Beispiel erstmal wieder verworfen, weil ich den Code garnicht kompiliert bekomme.
Hier mal die komplette Klasse der Form1, die ausschließlich eine F9-Taste anhand eines Integers registriert (siehe unten)
Das funktioniert bei mir - zum nachstellen muss man das Event Form1_Load noch im XML der FORM1 eintragen, sonst wird das nicht eingebunden...
Anhand dieser Information : None = 0, Alt = 1, Control = 2, Shift = 4, WinKey = 8
muss nun dieser Integerwert weiter unten angepasst werden, aber ich weiß einfach nicht wie. :-(
Festgelegt wird die F9 - Taste an dieser Stelle:
int HotKeyCode = (int)(Keys.F9);
Kann jemand dieses Beispiel für folgende Tastenkombinationen umformulieren?
STRG + ALT + H
(oder)
STRG + H
(oder)
ALT + H
Ich bräuchte einfach ein paar Beispiele, um das zu verstehen.
Hier das dazu von allen anderen Klassen unabhängige funktionierende Script zur Registrierung der Taste [F9]
PHP Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace CBW
{
public partial class Form1 : Form
{
[DllImport("user32.dll")] public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);
[DllImport("user32.dll")] public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
int UniqueHotkeyId = 1;
//int HotKeyCode = (int)Keys.Control + (int)Keys.Alt + (int)Keys.H;
//int HotKeyCode = (int)Keys.F9;
int HotKeyCode = (int)(Keys.F9);
// None = 0, Alt = 1, Control = 2, Shift = 4, WinKey = 8
static readonly IntPtr HWND_TOPMOST = new IntPtr(-1);
static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2);
static readonly IntPtr HWND_TOP = new IntPtr(0);
static readonly IntPtr HWND_BOTTOM = new IntPtr(1);
const UInt32 SWP_NOSIZE = 0x0001;
const UInt32 SWP_NOMOVE = 0x0002;
const UInt32 TOPMOST_FLAGS = SWP_NOMOVE | SWP_NOSIZE;
public Form1()
{
Console.WriteLine("Gestartet!");
InitializeComponent();
}
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0312)
{
int id = m.WParam.ToInt32();
MessageBox.Show(string.Format("Hotkey #{0} pressed", id));
if (id == 1)
{
// This will never happen because we have registered the hotkey !
MessageBox.Show("F9 Was pressed !");
}
}
base.WndProc(ref m);
}
private void Form1_Load(object sender, EventArgs e)
{
Boolean F9Registered = RegisterHotKey(
this.Handle, UniqueHotkeyId, 0x0000, HotKeyCode
);
if (F9Registered)
{
Console.WriteLine("Global Hotkey F9 was succesfully registered");
}
else
{
Console.WriteLine("Global Hotkey F9 couldn't be registered !");
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Boolean F9UnRegistered = UnregisterHotKey(this.Handle, UniqueHotkeyId);
if (F9UnRegistered)
{
Console.WriteLine("Global Hotkey F9 was succesfully UNregistered");
}
else
{
Console.WriteLine("Global Hotkey F9 couldn't be UNregistered !");
}
}
}
}
Comment