Ergebnis 1 bis 6 von 6

Thema: Hotkeys ?

Hybrid-Darstellung

  1. #1
    Das Leben ist der Lehrer Avatar von DoS
    Registriert seit
    18.08.2008
    Beiträge
    528

    Standard

    Zitat Zitat von Sawyer Beitrag anzeigen
    Code:
    using System.Runtime.InteropServices;
    Benötigte API:
    Code:
    [DllImport("user32.dll")]
    public static extern int GetAsyncKeyState(Keys vKey);
    Code:
    Code:
    while (true)
    { 
         if ((GetAsyncKeyState(Keys.Escape) == -32767)) {
              MessageBox.Show("ESC-Taste wurde betätigt!");
         }
    }
    Du solltest das ganze (Wenn du es in einer WinForms Anwendung Verwendest) in einem Extra Thread auslagern , da sonst deine Anwendung "Einfriert".
    Also, ich werde erstmal diese Möglichkeit hier nutzen, da sie mir im Moment erstmal am Einfachsten erscheint ( wenn ich in den Ferien mehr Zeit habe, werde ich das noch mal optimieren und mich den anderen Varianten zuwenden).

    Also ich habe jetzt das hier oben hinzugefügt:

    Code:
    using System.Runtime.InteropServices;
    using System.Threading;
    Zudem habe ich nun noch folgendes geändert:

    Code:
    public Form1()
            {
                
                
               
                InitializeComponent();
                update();  // update funktion
    
                KeyPress += new KeyPressEventHandler(keypressed); //brauche ich für die ursprüngliche Hotkey Variante, die leider nicht funktionierte, wie sie sollte
                while (true)
                {
                    Thread.Sleep(50);
                    if ((GetAsyncKeyState(Keys.Escape) == -32767))
                    {
                        MessageBox.Show("ESC-Taste wurde betätigt!");
                    }
                }
    Problem: Wenn ich das Programm starte läuft zwar die Updatefunktion (merke ich daran, dass Zone Alarm bei dem Programm nach der Internetverbindung fragt), aber danach kommt nichts mehr (auch komischerweise das Fenster nicht (Form)).

    Vermutlich liegt das daran/ am falschen Einbau der "while-Schleife" : "Du solltest das ganze (Wenn du es in einer WinForms Anwendung Verwendest) in einem Extra Thread auslagern , da sonst deine Anwendung "Einfriert"."

    Es wäre sehr freundlich, wenn du mir das noch etwas eingehender erklären könntest.

    Danke

    MfG. -DoS
    Legende: "Gruß" = kaum Zeit, "MfG." = durchschnittlich viel Zeit und "Mit freundlichen Grüßen" = viel Zeit
    gehabt beim Posten.


    Folgende Personen genießen meine Hochschätzung: BlackBerry, EBFE, DizzY_D, OpCodez, l0dsb und H4x0r007.

  2. #2
    Richard Stallman Avatar von Sawyer
    Registriert seit
    26.07.2008
    Beiträge
    2.037

    Standard

    Ist eigentlich ganz leicht , das beste ist du lagerst die Abfrage für die Keys in eine externe Funktion:

    Funktion:
    Code:
    private void KeyAbfragen() 
    {
        while (true)
        {
            Thread.Sleep(50);
            if ((GetAsyncKeyState(Keys.Escape) == -32767))
            {
                MessageBox.Show("ESC-Taste wurde betätigt!");
            }
        }
    }
    Danach kannst du aus der main Funktion heraus , diese Funktion in einem neuem Thread starten , wodurch die Anwendung problemlos laufen sollte , ohne einzufrieren.

    Aufruf:
    Code:
    private void Form1_Load(object sender, EventArgs e)
    {
        Thread th = new Thread(KeyAbfragen);
        th.Start();
    }
    MfG , Sawyer

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •