2009-07-27 1 views
1

Ich verwende den folgenden Code, um die Hotkeys wie Alt + f4, Strg + C, die perfekt funktionieren zu deaktivieren. Aber ich konnte Win + L nicht mit dem untenstehenden Code registrieren.Problem Registrierung Win + L Hotkey in C#

namespace KioskMode 
{ 
    public partial class Test : Form 
    { 
     #region Dynamic Link Library Imports 

     [DllImport("user32.dll")] 
     private static extern int FindWindow(string cls, string wndwText); 

     [DllImport("user32.dll")] 
     private static extern int ShowWindow(int hwnd, int cmd); 

     [DllImport("user32.dll")] 
     private static extern long SHAppBarMessage(long dword, int cmd); 

     [DllImport("user32.dll")] 
     private static extern int RegisterHotKey(IntPtr hwnd, int id, int fsModifiers, int vk); 

     [DllImport("user32.dll")] 
     private static extern int UnregisterHotKey(IntPtr hwnd, int id); 

     #endregion 


     #region Modifier Constants and Variables 

     // Constants for modifier keys 
     private const int USE_ALT = 1; 
     private const int USE_CTRL = 2; 
     private const int USE_SHIFT = 4; 
     private const int USE_WIN = 8; 

     // Hot key ID tracker 
     short mHotKeyId = 0; 

     #endregion 

     public Test() 
     { 
      InitializeComponent(); 
      RegisterGlobalHotKey(Keys.F4, USE_ALT); 
      RegisterGlobalHotKey(Keys.L, USE_WIN); 
     } 

     private void RegisterGlobalHotKey(Keys hotkey, int modifiers) 
     { 
      try 
      { 
       mHotKeyId++; 

       if (mHotKeyId > 0) 
       { 
        // register the hot key combination 
        if (RegisterHotKey(this.Handle, mHotKeyId, modifiers, Convert.ToInt16(hotkey)) == 0) 
        { 
          MessageBox.Show("Error: " + mHotKeyId.ToString() + " - " + 
          Marshal.GetLastWin32Error().ToString(), 
          "Hot Key Registration"); 
        } 
       } 
      } 
      catch 
      { 
       UnregisterGlobalHotKey(); 
      } 
     } 


     private void UnregisterGlobalHotKey() 
     { 
      for (int i = 0; i < mHotKeyId; i++) 
      { 
       UnregisterHotKey(this.Handle, i); 
      } 
     } 

     protected override void WndProc(ref Message m) 
     { 
      base.WndProc(ref m); 
      const int WM_HOTKEY = 0x312; 
      if (m.Msg == WM_HOTKEY) 
      { 
       // Ignore the request or each 
       // disabled hotkey combination 
      } 
     } 
    } 
} 
+1

Der Windows-Schlüssel ist "für das Betriebssystem reserviert", so dass jeder Einsatz unzuverlässig ist und gegen den Benutzer arbeitet: Wenn Sie versuchen, Win-L zu verwenden, stellen Sie die Anforderungen Ihrer Anwendung vor die Bedürfnisse des Benutzers. – Richard

+1

@ Richard- Ich denke (basierend auf dem Namen der gleichen Klasse) Karthik erstellt eine Kiosk-Anwendung, keine normale Desktop-App. – RichardOD

Antwort

5

Sie können es nicht registrieren, da Windows es bereits als Hotkey verwendet. Wenn Sie es wirklich tun möchten, müssen Sie einen Low-Level-Tastatur-Hook registrieren.

Grund, warum Sie Alt + F4, Strg + C ... registrieren können, ist, dass diese Tasten keine Hotkeys sind (sie werden nur in wndproc verarbeitet).

3

Warum nicht in Gruppenrichtlinien oder stattdessen die Registrierung bearbeiten?

+1

+1, wie ich das auch vorschlagen würde. – Bryan