程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#全局熱鍵設置與窗體熱鍵設置實例

C#全局熱鍵設置與窗體熱鍵設置實例

編輯:C#入門知識

C#全局熱鍵設置與窗體熱鍵設置實例。本站提示廣大學習愛好者:(C#全局熱鍵設置與窗體熱鍵設置實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#全局熱鍵設置與窗體熱鍵設置實例正文


本文實例講述了C#全局熱鍵設置與窗體熱鍵設置,分享給年夜家供年夜家參考。詳細完成辦法以下:

1、窗體熱鍵

起首要設置主窗體KeyPreview為true,可直接在屬性中停止設置,
或許在窗體加載中設置: this.KeyPreview = true;
然後添加窗體KeyDown事宜,以下:

private void FrmMain_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Alt && e.Shift && e.Control && e.KeyCode == Keys.S)
    {
 MessageBox.Show("我按了Control +Shift +Alt +S");
    }
}

2、全局熱鍵設置

界說API函數 》 注冊熱鍵 》 卸載熱鍵

我這裡界說了AppHotKey類,全體代碼以下:

public class AppHotKey
{
        [DllImport("kernel32.dll")]
        public static extern uint GetLastError();
        //假如函數履行勝利,前往值不為0。
        //假如函數履行掉敗,前往值為0。要獲得擴大毛病信息,挪用GetLastError。
        [DllImport("user32.dll", SetLastError = true)]
        public static extern bool RegisterHotKey(
            IntPtr hWnd,                //要界說熱鍵的窗口的句柄
            int id,                     //界說熱鍵ID(不克不及與其它ID反復)          
            KeyModifiers fsModifiers,   //標識熱鍵能否在按Alt、Ctrl、Shift、Windows等鍵時才會失效
            Keys vk                     //界說熱鍵的內容
            );

        [DllImport("user32.dll", SetLastError = true)]
        public static extern bool UnregisterHotKey(
            IntPtr hWnd,                //要撤消熱鍵的窗口的句柄
            int id                      //要撤消熱鍵的ID
            );

        //界說了幫助鍵的稱號(將數字改變為字符以便於記憶,也可去除此列舉而直接應用數值)
        [Flags()]
        public enum KeyModifiers
        {
            None = 0,
            Alt = 1,
            Ctrl = 2,
            Shift = 4,
            WindowsKey = 8
        }
        /// <summary>
        /// 注冊熱鍵
        /// </summary>
        /// <param name="hwnd">窗口句柄</param>
        /// <param name="hotKey_id">熱鍵ID</param>
        /// <param name="keyModifiers">組合鍵</param>
        /// <param name="key">熱鍵</param>
        public static void RegKey(IntPtr hwnd, int hotKey_id, KeyModifiers keyModifiers, Keys key)
        {
            try
            {
                if (!RegisterHotKey(hwnd, hotKey_id, keyModifiers, key))
                {
                    if (Marshal.GetLastWin32Error() == 1409) { MessageBox.Show("熱鍵被占用 !"); }
                    else
                    {
                        MessageBox.Show("注冊熱鍵掉敗!");
                    }
                }
            }
            catch (Exception) { }
        }
        /// <summary>
        /// 刊出熱鍵
        /// </summary>
        /// <param name="hwnd">窗口句柄</param>
        /// <param name="hotKey_id">熱鍵ID</param>
        public static void UnRegKey(IntPtr hwnd, int hotKey_id)
        {
            //刊出Id號為hotKey_id的熱鍵設定
            UnregisterHotKey(hwnd, hotKey_id);
        }
}

重寫窗體的WndProc函數,在窗口創立的時刻注冊熱鍵,窗口燒毀時燒毀熱鍵,代碼以下:

private const int WM_HOTKEY = 0x312; //窗口新聞-熱鍵
private const int WM_CREATE = 0x1; //窗口新聞-創立
private const int WM_DESTROY = 0x2; //窗口新聞-燒毀
private const int Space = 0x3572; //熱鍵ID
protected override void WndProc(ref Message m)
{
    base.WndProc(ref m);
    switch (m.Msg)
    {
 case WM_HOTKEY: //窗口新聞-熱鍵ID
     switch (m.WParam.ToInt32())
     {
  case Space: //熱鍵ID
      MessageBox.Show("我按了Control +Shift +Alt +S");
      break;
  default:
      break;
     }
     break;
 case WM_CREATE: //窗口新聞-創立
     AppHotKey.RegKey(Handle, Space, AppHotKey.KeyModifiers.Ctrl | AppHotKey.KeyModifiers.Shift | AppHotKey.KeyModifiers.Alt, Keys.S);
     break;
 case WM_DESTROY: //窗口新聞-燒毀
     AppHotKey.UnRegKey(Handle, Space); //燒毀熱鍵
     break;
 default:
     break;
    }
}

願望本文所述對年夜家的C#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved