欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#全局熱鍵設(shè)置與窗體熱鍵設(shè)置實(shí)例

 更新時(shí)間:2014年10月23日 14:54:51   投稿:shichen2014  
這篇文章主要介紹了C#全局熱鍵設(shè)置與窗體熱鍵設(shè)置實(shí)例,對(duì)C#全局熱鍵設(shè)置與窗體熱鍵設(shè)置的實(shí)現(xiàn)方法與具體代碼進(jìn)行了詳細(xì)的介紹,需要的朋友可以參考下

本文實(shí)例講述了C#全局熱鍵設(shè)置與窗體熱鍵設(shè)置,分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:

1、窗體熱鍵

首先要設(shè)置主窗體KeyPreview為true,可直接在屬性中進(jìn)行設(shè)置,
或者在窗體加載中設(shè)置: this.KeyPreview = true;
然后添加窗體KeyDown事件,如下:

復(fù)制代碼 代碼如下:
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、全局熱鍵設(shè)置

定義API函數(shù) 》 注冊(cè)熱鍵 》 卸載熱鍵

我這里定義了AppHotKey類,全部代碼如下:

復(fù)制代碼 代碼如下:
public class AppHotKey
{
        [DllImport("kernel32.dll")]
        public static extern uint GetLastError();
        //如果函數(shù)執(zhí)行成功,返回值不為0。
        //如果函數(shù)執(zhí)行失敗,返回值為0。要得到擴(kuò)展錯(cuò)誤信息,調(diào)用GetLastError。
        [DllImport("user32.dll", SetLastError = true)]
        public static extern bool RegisterHotKey(
            IntPtr hWnd,                //要定義熱鍵的窗口的句柄
            int id,                     //定義熱鍵ID(不能與其它ID重復(fù))          
            KeyModifiers fsModifiers,   //標(biāo)識(shí)熱鍵是否在按Alt、Ctrl、Shift、Windows等鍵時(shí)才會(huì)生效
            Keys vk                     //定義熱鍵的內(nèi)容
            );

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

        //定義了輔助鍵的名稱(將數(shù)字轉(zhuǎn)變?yōu)樽址员阌谟洃?,也可去除此枚舉而直接使用數(shù)值)
        [Flags()]
        public enum KeyModifiers
        {
            None = 0,
            Alt = 1,
            Ctrl = 2,
            Shift = 4,
            WindowsKey = 8
        }
        /// <summary>
        /// 注冊(cè)熱鍵
        /// </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("注冊(cè)熱鍵失敗!");
                    }
                }
            }
            catch (Exception) { }
        }
        /// <summary>
        /// 注銷熱鍵
        /// </summary>
        /// <param name="hwnd">窗口句柄</param>
        /// <param name="hotKey_id">熱鍵ID</param>
        public static void UnRegKey(IntPtr hwnd, int hotKey_id)
        {
            //注銷Id號(hào)為hotKey_id的熱鍵設(shè)定
            UnregisterHotKey(hwnd, hotKey_id);
        }
}

重寫窗體的WndProc函數(shù),在窗口創(chuàng)建的時(shí)候注冊(cè)熱鍵,窗口銷毀時(shí)銷毀熱鍵,代碼如下:

復(fù)制代碼 代碼如下:
private const int WM_HOTKEY = 0x312; //窗口消息-熱鍵
private const int WM_CREATE = 0x1; //窗口消息-創(chuàng)建
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: //窗口消息-創(chuàng)建
     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;
    }
}

希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 深入淺出掌握Unity ShaderLab語法基礎(chǔ)

    深入淺出掌握Unity ShaderLab語法基礎(chǔ)

    Unity中所有Shader文件都通過一種陳述性語言進(jìn)行描述,稱為“ShaderLab”, 這篇文章主要介紹了Unity圖形學(xué)之ShaderLab入門基礎(chǔ),需要的朋友可以參考下
    2023-05-05
  • C#利用OpenCvSharp實(shí)現(xiàn)玉米粒計(jì)數(shù)

    C#利用OpenCvSharp實(shí)現(xiàn)玉米粒計(jì)數(shù)

    這篇文章主要為大家詳細(xì)介紹了C#如何結(jié)合OpenCVSharp4實(shí)現(xiàn)玉米粒計(jì)數(shù),文中的示例代碼簡潔易懂,具有一定的學(xué)習(xí)價(jià)值,需要的小伙伴可以參考下
    2023-11-11
  • C#通過yield實(shí)現(xiàn)數(shù)組全排列的方法

    C#通過yield實(shí)現(xiàn)數(shù)組全排列的方法

    這篇文章主要介紹了C#通過yield實(shí)現(xiàn)數(shù)組全排列的方法,以實(shí)例形式較為詳細(xì)的分析了全排列的概念及C#的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • 深入多線程之:用Wait與Pulse模擬一些同步構(gòu)造的應(yīng)用詳解

    深入多線程之:用Wait與Pulse模擬一些同步構(gòu)造的應(yīng)用詳解

    本篇文章是對(duì)用Wait與Pulse模擬一些同步構(gòu)造的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C# DateTime與時(shí)間戳轉(zhuǎn)換實(shí)例

    C# DateTime與時(shí)間戳轉(zhuǎn)換實(shí)例

    本篇文章主要介紹了C# DateTime與時(shí)間戳轉(zhuǎn)換實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • C# 中const,readonly,static的使用小結(jié)

    C# 中const,readonly,static的使用小結(jié)

    這篇文章主要介紹了C# 中使用const,readonly,static的示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-01-01
  • VS2019打包WPF安裝程序最新教程(圖文詳解)

    VS2019打包WPF安裝程序最新教程(圖文詳解)

    這篇文章主要介紹了VS2019打包WPF安裝程序最新教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 基于WPF繪制一個(gè)點(diǎn)贊大拇指動(dòng)畫

    基于WPF繪制一個(gè)點(diǎn)贊大拇指動(dòng)畫

    這篇文章主要為大家詳細(xì)介紹了WPF實(shí)現(xiàn)繪制一個(gè)點(diǎn)贊大拇指動(dòng)畫,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下
    2023-02-02
  • C#簡單實(shí)現(xiàn)表達(dá)式目錄樹(Expression)

    C#簡單實(shí)現(xiàn)表達(dá)式目錄樹(Expression)

    表達(dá)式目錄樹以數(shù)據(jù)形式表示語言級(jí)別代碼。數(shù)據(jù)存儲(chǔ)在樹形結(jié)構(gòu)中。表達(dá)式目錄樹中的每個(gè)節(jié)點(diǎn)都表示一個(gè)表達(dá)式。這篇文章給大家介紹C#簡單實(shí)現(xiàn)表達(dá)式目錄樹(Expression),需要的朋友參考下吧
    2017-11-11
  • 如何利用c#實(shí)現(xiàn)通用守護(hù)進(jìn)程

    如何利用c#實(shí)現(xiàn)通用守護(hù)進(jìn)程

    這篇文章主要給大家介紹了關(guān)于如何利用c#實(shí)現(xiàn)通用守護(hù)進(jìn)程的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用c#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10

最新評(píng)論