2012-04-02 4 views
0

Ich möchte in meiner Anwendung machen, als wenn diese Anwendung im Hintergrund ist, wenn ich auf F10 klicke, wird die Funktion mit Schleife gestartet.Senden von Hotkeys zum Programmieren im Hintergrund

Dies ist mein Code:

namespace test 
    { 
     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); 

      public Form1() //(lub Form1_Load(object sender, System.EventArgs e)) 
      { 
      RegisterHotKey(this.Handle,9000, 2, (int) Keys.F10); 

      InitializeComponent(); 
      } 

      private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
      { 
      UnregisterHotKey(this.Handle,9000); 
      UnregisterHotKey(this.Handle,9001); 

      } 

      protected override void WndProc(ref Message m) 
      { 
      base.WndProc(ref m); 
      switch (m.Msg) 
      { 
       case 0x312: 
        switch (m.WParam.ToInt32()) 
        { 
        case 9000: 
         //code 
         break; 
        case 9001: 
         //code 
         break; 
        } 
        break; 
       } 
      } 
     } 
    } 

Aber funktionieren nicht :(

Können Sie mir bitte helfen

+1

Bitte erläutern Sie, was nicht funktioniert. – cadrell0

+0

Es ist innen Funktion WndProc gehen, aber nie in Fall 9000 und 9001 – cadi2108

+0

Ich werde dies nicht als ein Duplikat markieren, aber könnte dies verwandt sein? http://stackoverflow.com/questions/6664420/f10-key-is-not-caught – cadrell0

Antwort

1

wenn ich

F10 klicken, wird Falscher Schlüssel, du musst Strg + F10 eingeben Du hast 2 als drittes Argument an RegisterHotKey() übergeben, das ist MOD_ STEUERUNG. Die Verwendung von const- oder enum-Deklarationen anstelle von rohen Literalen hilft Ihnen, in die Falle des Erfolgs zu geraten.

+0

Danke, du hast Recht! – cadi2108