• C#实现系统热键的功能


    利用windows api方式实现系统热键的功能!
    主要类设计如下:
    using System;
    using System.Windows.Forms; // for Key namespace
    using System.Runtime.InteropServices;
     
    namespace 实现系统热键
    {
     /// <summary>
     /// WIN32 Windows API辅助操作类.
     /// </summary>
     public class NativeWIN32
     {
      public NativeWIN32()
      {}
      /* ------- using WIN32 Windows API in a C# application ------- */
     
      [DllImport("user32.dll", CharSet=CharSet.Auto)]
      static public extern IntPtr GetForegroundWindow(); //
     
      [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
       public struct STRINGBUFFER
      {
       [MarshalAs(UnmanagedType.ByValTStr, SizeConst=256)]
       public string szText;
      }
     
      [DllImport("user32.dll", CharSet=CharSet.Auto)]
      public static extern int GetWindowText(IntPtr hWnd,  out STRINGBUFFER ClassName, int nMaxCount);
     
      [DllImport("user32.dll", CharSet=CharSet.Auto)]
      public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
     
      [DllImport("user32.dll", CharSet=CharSet.Auto)]
      public static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam);
     
      public const int WM_SYSCOMMAND = 0x0112;
      public const int SC_CLOSE = 0xF060;
     
      public delegate bool EnumThreadProc(IntPtr hwnd, IntPtr lParam);
     
      [DllImport("user32.dll", CharSet=CharSet.Auto)]
      public static extern bool EnumThreadWindows(int threadId, EnumThreadProc pfnEnum, IntPtr lParam);
     
      [DllImport("user32.dll", CharSet=CharSet.Auto)]
      public static extern IntPtr FindWindowEx(IntPtr parent, IntPtr next, string sClassName, IntPtr sWindowTitle);
     

      /* ------- using HOTKEYs in a C# application -------
     
      in form load :
       bool success = RegisterHotKey(Handle, 100,     KeyModifiers.Control | KeyModifiers.Shift, Keys.J);
     
      in form closing :
       UnregisterHotKey(Handle, 100);
      
     
      protected override void WndProc( ref Message m )
      {
       const int WM_HOTKEY = 0x0312; 
      
       switch(m.Msg)
       {
        case WM_HOTKEY: 
         MessageBox.Show("Hotkey pressed"); 
         break;
       } 
       base.WndProc(ref m );
      }
     
      ------- using HOTKEYs in a C# application ------- */
     
      [DllImport("user32.dll", SetLastError=true)]
      public static extern bool RegisterHotKey( IntPtr hWnd, // handle to window   
       int id,            // hot key identifier   
       KeyModifiers fsModifiers,  // key-modifier options   
       Keys vk            // virtual-key code   
       );
     
      [DllImport("user32.dll", SetLastError=true)]
      public static extern bool UnregisterHotKey( IntPtr hWnd,  // handle to window   
       int id      // hot key identifier   
       );
     
      [Flags()]
       public enum KeyModifiers
      { 
       None = 0,
       Alt = 1,   
       Control = 2,   
       Shift = 4,   
       Windows = 8
      }
     }
    }

  • 相关阅读:
    三分
    知识点整合摘取
    Codeforces Round #533 C. Ayoub and Lost Array
    判断当前VC 是push还是present的
    自动布局
    获取当前的 viewController
    UIImageView 点击放大缩小
    UIButton 在UIScrollView里面 点击效果不明显的问题
    IOS AutoLayout 遍历修改约束
    GIT 命令 操作 记录
  • 原文地址:https://www.cnblogs.com/tuyile006/p/490419.html
Copyright © 2020-2023  润新知