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

C#調(diào)用系統(tǒng)API指定快捷鍵的方法

 更新時間:2015年06月05日 11:03:18   作者:聰明的笨蛋  
這篇文章主要介紹了C#調(diào)用系統(tǒng)API指定快捷鍵的方法,涉及C#快捷鍵的操作技巧,需要的朋友可以參考下

本文實例講述了C#調(diào)用系統(tǒng)API指定快捷鍵的方法。分享給大家供大家參考。具體分析如下:

快捷鍵的作用大家都清楚,就是快捷嘛,操作起來方便.用電腦的人很少有沒用過Ctrl + C 和Ctrl + V的. 其他很多軟件也有各種快捷鍵.電腦自然沒那么聰明,知道我們敲哪些鍵然后給出相應反應,這都得我們自己寫代碼實現(xiàn)啊.指定快捷鍵有兩種方式.

方法一.當應用程序某個頁面獲得焦點時,直接寫一個該頁面的KeyDown事件處理函數(shù)就行,非常的簡單.我們大多數(shù)時候就用的這種快捷鍵.

方法二.在任何時候都能使用快捷鍵,此時必須調(diào)用系統(tǒng)的API才行.這種情況我們用的不多.不過有個典型的例子,就是通過快捷鍵切換輸入法.輸入法的應用程序肯定是通過API處理的.

方法一

我們知道點擊鼠標,敲鍵盤都是觸發(fā)一個個的事件.那使用快捷鍵自然是要寫個鍵盤敲擊的事件處理函數(shù).我們知道每個控件都可以對應很多事件.所以鍵盤的的事件處理自然可以和某一個控件關聯(lián)起來.但一般不怎么樣,因為這樣的話我們必須得先讓此控件獲得焦點才行. 而我們很多時候可能希望只要是某個頁面打開的情況下,不管焦點在其中的哪個控件上都可以點快捷鍵鍵.那我們應該把事件處理與頁面(Form)關聯(lián)起來.假如有頁面Form1.對應的事件處理函數(shù)如下.

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.A) //快捷鍵a
{
  MessageBox.Show("hello arwen");
}
else if (e.KeyCode == Keys.F1) //快捷鍵F1
{
  MessageBox.Show("please help.");
}
else if (e.Control && e.Shift && e.KeyCode == Keys.F)
//快捷鍵Ctrl + Shift + F
{
  MessageBox.Show("search some info.");
}
else if (e.Alt && e.KeyCode == Keys.X) //快捷鍵Alt + X
{
  MessageBox.Show("Close.");
}
}

在函數(shù)里面可以通過e.KeyCode判斷是敲了哪個鍵.然后做相應的處理就OK.當然你也可以不用e.KeyCode.而是用e.KeyValue來判斷,KeyValue就是每個鍵上面的字母或符號對應的ASCII 碼值.
 
方法二,調(diào)用API

調(diào)用API最關鍵的地方就兩個
一是調(diào)用API函數(shù)RegisterHotKey
二是重寫函數(shù)WndProc.
 
下面就來看下具體的操作過程

第一步.引用命名空間

復制代碼 代碼如下:
using System.Runtime.InteropServices;

添加此命名空間.C#中調(diào)用系統(tǒng)API都會用到這玩藝的.
 
第二步.申明API函數(shù)RegisterHotKey

復制代碼 代碼如下:
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint keyValue, Keys vk);

這樣聲明下就相當于你自己定義了一個函數(shù)RegisterHotKey,你只管在其他任意地方調(diào)用就行.只是這里看不到函數(shù)的實現(xiàn),相當于是在user32.dll這里面給你實現(xiàn)了.
 
第三步.調(diào)用API函數(shù)

第二步已經(jīng)給你整出個函數(shù)了.現(xiàn)在你就像用普通函數(shù)一樣來用就行.假如就在頁面剛加載時就調(diào)用此函數(shù)吧.

復制代碼 代碼如下:
RegisterHotKey(Handle, 888, 2, Keys.F);
//指定Ctrl + F為快捷鍵,并與數(shù)字888關聯(lián)

其中handle是啥句柄之類的,你只管寫上,具體不用管.在代碼里代不會顯式用到它.888是啥呢? 第二步中參數(shù)列表可以看到這是id,所謂id就是通過一個數(shù)字唯一標志啥嘛.所以這里你隨便用個啥數(shù)都行的.在后面的函數(shù)WndProc函數(shù)中會用到這數(shù)字. 2是keyValue,不過只有幾個特殊鍵的值.比如Ctrl鍵對應的是2,Shift鍵對應的是4,Alt鍵對應的是1.都定好了的,你不能改.Keys.F就指定任意某個鍵.你可能會問如果是Ctrl + Shift這樣的組合怎么辦?很簡單兩數(shù)字直接加起來就行.比如

復制代碼 代碼如下:
RegisterHotKey(Handle, 444, 6, Keys.S);
//指定Ctrl +Shift+ S為快捷鍵,并與數(shù)字444關聯(lián)

第四步.重寫函數(shù)WndProc

前面三步非常好理解.就是調(diào)用個API中的函數(shù)嘛.雖然麻煩了點,但原理和調(diào)用一般函數(shù)差不多.但第四步有點難理解.在前面的方法一中我們知道可以通過調(diào)用一個事件處理鍵盤事件就OK.前面三步還沒有涉及到事件的概念.那你自然會想到第四步應該是整個事件處理才行啊.的確如此.在這里就是指定一個事件調(diào)用的函數(shù).只不過這個函數(shù)你看不到是哪里調(diào)用了.實際上是操作系統(tǒng)來調(diào)用這函數(shù)的.原理有點復雜,可能你得去看下C++的消息處理機制才明白.C#的底層那些實現(xiàn)實際上就是用C++寫的嘛.

這一步也可以簡單的理解為就是對應方法一中的事件處理函數(shù)

protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x0312:
IntPtr id = m.WParam;
switch (id.ToString())
{
case "888":
//這里的888就是前面調(diào)用函數(shù)RegisterHotKey指定的數(shù)字
MessageBox.Show("Help me."); break;
case "444":
MessageBox.Show("Search some info."); break;
}
break;
}
base.WndProc(ref m);
}

希望本文所述對大家的C#程序設計有所幫助。

相關文章

  • C#中BitConverter.ToUInt16()和BitConverter.ToString()的簡單使用

    C#中BitConverter.ToUInt16()和BitConverter.ToString()的簡單使用

    這篇文章主要介紹了C#中BitConverter.ToUInt16()和BitConverter.ToString()的簡單使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • C#中while循環(huán)語句用法實例詳解

    C#中while循環(huán)語句用法實例詳解

    這篇文章主要介紹了C#中while循環(huán)語句用法,以實例形式詳細分析了while語句的用法,并對return,continue,break的區(qū)別做了進一步的分析,需要的朋友可以參考下
    2014-10-10
  • Unity實現(xiàn)俄羅斯方塊

    Unity實現(xiàn)俄羅斯方塊

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)俄羅斯方塊,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • C#語法之泛型的多種應用

    C#語法之泛型的多種應用

    這篇文章主要介紹了C#語法之泛型的多種應用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • C#中使用HttpDownLoadHelper下載文件實例

    C#中使用HttpDownLoadHelper下載文件實例

    這篇文章主要介紹了C#中使用HttpDownLoadHelper下載文件的方法,并實例講述了在webfrom中與在mvc中的實現(xiàn)方法,需要的朋友可以參考下
    2014-10-10
  • C#遠程獲取圖片文件流的方法

    C#遠程獲取圖片文件流的方法

    這篇文章主要介紹了C#遠程獲取圖片文件流的方法,涉及C#針對圖片及文件流操作的相關技巧,需要的朋友可以參考下
    2016-02-02
  • C#帶你玩掃雷(附源碼)

    C#帶你玩掃雷(附源碼)

    這篇文章主要介紹了C#帶你玩掃雷(附源碼),詳細的介紹實現(xiàn)掃雷的方法,具體一定的參考價值,有興趣的可以了解一下
    2017-10-10
  • C#中派生類調(diào)用基類構造函數(shù)用法分析

    C#中派生類調(diào)用基類構造函數(shù)用法分析

    這篇文章主要介紹了C#中派生類調(diào)用基類構造函數(shù)用法,實例分析了派生類調(diào)用基類構造函數(shù)的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • Entity?Framework映射TPH、TPT、TPC與繼承類

    Entity?Framework映射TPH、TPT、TPC與繼承類

    這篇文章介紹了Entity?Framework映射TPH、TPT、TPC與繼承類,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C#實現(xiàn)簡單飛行棋小游戲

    C#實現(xiàn)簡單飛行棋小游戲

    這篇文章主要為大家詳細介紹了C#實現(xiàn)簡單飛行棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03

最新評論