C# Hotkey oder Tastenkombination

Goblinkiller

Ensign
Registriert
Feb. 2006
Beiträge
151
Hallo Forumbase,

Ich versuche mir ein kleines Programm zu schreiben, mit welchem ich per Tastenkombination ein Programm ausführe. Das mit dem Programm ausführen klappt schon nur wie bringe ich das jetzt unter, so das ich per Tastenkombo die jeweilige Anwendung starte.

Google hilft mir leider auch nicht weil ich eigentlich noch ziemlicher C# Anfänger bin(nur in der Berufsschule).


MfG Gobkilla
 
Denke du kommst nicht drum herum das Programm ständig im Hintergrund laufen zu lassen. Oder eventuell ein zweites, kleineres was lediglich auf die Eingabe auf bestimmte Tasten wartet und vergleicht.
 
Ja das Programm läuft auch ständig minimiert ich will nur nicht immer das Programm öfnnen und auf Start oder so drücken um eine externe Anwendung auszuführen sondern per Tastenkombo das jeweilige externe Programm z.B. Mozilla Firefox aufrufen.

Den Code zum starten der Programme habe ich schon, nur den Code für die Hotkeys weiß ich nicht. Und aus den google Einträgen werde ich nicht schlau!
 
Du kannst doch über die Eigenschaften der Verknüpfung eine Tastenkombination festlegen. Also Programmverknüpfung über den Desktop oder Schnellstartleiste mit rechter Maustaste aufrufen und dann auf Eigenschaften und eine Tastenkombination festlegen. "strg+alt" wird vorgegeben, dann eine Zahl von 0 bis 9 hinzufügen.
 
Würde hier die Lösung über die Verknüpfungen wählen, denn genau dafür gibt es diese Möglichkeit da ja...
Was anderes wäre, wenn das Programm sich bei Hotkey z.B. zeigen soll, dann kann man mit den Hooks arbeiten.
 
Code:
    static class Program
    {

        [DllImport("user32.dll")]
        static extern short GetKeyState(Keys vKey);

        public static bool active = false;
        public static bool done = false;

        public static Keys scannedKey = Keys.F;
        public static Keys onOffKey = Keys.F10;
        public static Keys highMidKey = Keys.F9;

        public static Thread onOffThread;

        [STAThread]
        static void Main()
        {
            onOffThread = new Thread(OnOffMonitor);
            onOffThread.Start();

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }


        static void  OnOffMonitor() {
            short keystate=0, keystate2=1;
            bool activecheck = Program.active;

            while (!Program.done)
            {
                keystate = GetKeyState(onOffKey);
                if ( keystate < 0 && keystate != keystate2)
                {
                    Program.active = !Program.active;
                    keystate2 = keystate;
                }
                System.Threading.Thread.Sleep(10);
            }
        }
}

Das Stückchen Code invoked GetKeyState() und starten einen Watcher-Thread um auf bestimmte Tasten zu warten und dann eben bestimmte Sachen zu tun. Eigtl recht einfach, man muss sich nur mal angucken was GetKeyState() denn genau macht. Unschön geschrieben aber geht :)
 
Zuletzt bearbeitet:
Wie wärs mit RegisterHotKey(...);
http://msdn.microsoft.com/en-us/library/ms646309.aspx
Sollte eigentlich "schön" sein.
Und ist praktisch und nicht schwer zu verstehen, du kannst dann auch nach mehreren Hotkeys filtern, indem du mehrere registrierst und dann in der Messageschleifen auf diese Hotkeys prüfst.
Also
if(HIWORD(msg.lParam)==Key1)
{...}
if(HIWORD(msg.lParam)==Key2)
{...}
 
registerhotkey ist auch die ideale lösung. Versagt aber leider, wenn man auf einen einfachen Tastendruck wie zb 'x' wartet und auch auslösen möchte wenn X, alt+x oder sonstige kombinationen vorkommen. dann müsste man nämlich alle möglichkeiten als hotkey registrieren, was etwas unschön ist.

innerhalb einer form kann man sich natürlich auch an die keypress events hängen solange die form im focus liegt.
 
Code:
private void MyForm_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F10 || e.KeyCode == Keys.Escape)
            {
                DialogResult dlr = MessageBox.Show("Exit now?", "System", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);

                if (dlr == DialogResult.OK)
                {
                    Application.Exit();
                }
            }
        }

also wenn du windows form verwendest dann klick auf die ereignissehandler in Optionsmenü und füge eine neue methode zu dem keydown Ereignis. Du musst aber noch was freischalten, nähmlich KeyPreview in deinen FORM. Wenn es nicht auf true ist, kannst du deine Hotkeys nicht verwenden.
 
Zurück
Oben