最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

方法一

我們知道點(diǎn)擊鼠標(biāo),敲鍵盤都是觸發(fā)一個(gè)個(gè)的事件.那使用快捷鍵自然是要寫個(gè)鍵盤敲擊的事件處理函數(shù).我們知道每個(gè)控件都可以對(duì)應(yīng)很多事件.所以鍵盤的的事件處理自然可以和某一個(gè)控件關(guān)聯(lián)起來(lái).但一般不怎么樣,因?yàn)檫@樣的話我們必須得先讓此控件獲得焦點(diǎn)才行. 而我們很多時(shí)候可能希望只要是某個(gè)頁(yè)面打開的情況下,不管焦點(diǎn)在其中的哪個(gè)控件上都可以點(diǎn)快捷鍵鍵.那我們應(yīng)該把事件處理與頁(yè)面(Form)關(guān)聯(lián)起來(lái).假如有頁(yè)面Form1.對(duì)應(yīng)的事件處理函數(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ù)里面可以通過(guò)e.KeyCode判斷是敲了哪個(gè)鍵.然后做相應(yīng)的處理就OK.當(dāng)然你也可以不用e.KeyCode.而是用e.KeyValue來(lái)判斷,KeyValue就是每個(gè)鍵上面的字母或符號(hào)對(duì)應(yīng)的ASCII 碼值.
 
方法二,調(diào)用API

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

第一步.引用命名空間

復(fù)制代碼 代碼如下:
using System.Runtime.InteropServices;

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

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

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

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

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

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

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

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

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

這一步也可以簡(jiǎn)單的理解為就是對(duì)應(yīng)方法一中的事件處理函數(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);
}

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

相關(guān)文章

  • c#模擬銀行atm機(jī)示例分享

    c#模擬銀行atm機(jī)示例分享

    這篇文章主要介紹了c#模擬銀行atm機(jī)示例,實(shí)現(xiàn)了用戶登錄、用戶存款、用戶取款等功能,需要的朋友可以參考下
    2014-03-03
  • C#開發(fā)Windows UWP系列之對(duì)話框MessageDialog和ContentDialog

    C#開發(fā)Windows UWP系列之對(duì)話框MessageDialog和ContentDialog

    這篇文章介紹了C#開發(fā)Windows UWP系列之對(duì)話框MessageDialog和ContentDialog,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C#高效實(shí)現(xiàn)集合批量添加與刪除操作

    C#高效實(shí)現(xiàn)集合批量添加與刪除操作

    在C#中,對(duì)集合進(jìn)行批量操作通常涉及使用集合類型提供的方法和特性,以及可能的循環(huán)或LINQ查詢來(lái)高效地處理大量數(shù)據(jù),本文整理了一些常見(jiàn)的方法和技巧,需要的可以了解下
    2025-01-01
  • C#單線程和多線程端口掃描器詳解

    C#單線程和多線程端口掃描器詳解

    這篇文章主要為大家詳細(xì)介紹了C#單線程和多線程端口掃描器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • C#實(shí)現(xiàn)ini文件讀寫操作

    C#實(shí)現(xiàn)ini文件讀寫操作

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)ini文件的讀寫操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • C#凈化版WebApi框架的實(shí)現(xiàn)

    C#凈化版WebApi框架的實(shí)現(xiàn)

    這篇文章主要介紹了C#凈化版WebApi框架的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • C#中txt數(shù)據(jù)寫入的幾種常見(jiàn)方法

    C#中txt數(shù)據(jù)寫入的幾種常見(jiàn)方法

    這篇文章主要給大家介紹了關(guān)于C#中txt數(shù)據(jù)寫入的幾種常見(jiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • c#實(shí)現(xiàn)適配器模式的項(xiàng)目實(shí)踐

    c#實(shí)現(xiàn)適配器模式的項(xiàng)目實(shí)踐

    適配器模式將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另一個(gè)接口,使得原本由于接口不兼容而不能一起工作的那些類可以一起工作,本文主要介紹了c#實(shí)現(xiàn)適配器模式的項(xiàng)目實(shí)踐,感興趣的可以一起來(lái)了解一下
    2023-08-08
  • C#使用System.Threading.Timer實(shí)現(xiàn)計(jì)時(shí)器的示例詳解

    C#使用System.Threading.Timer實(shí)現(xiàn)計(jì)時(shí)器的示例詳解

    以往一般都是用 System.Timers.Timer 來(lái)做計(jì)時(shí)器,其實(shí) System.Threading.Timer 也可以實(shí)現(xiàn)計(jì)時(shí)器功能,下面就跟隨小編一起來(lái)學(xué)習(xí)一下如何使用System.Threading.Timer實(shí)現(xiàn)計(jì)時(shí)器功能吧
    2024-01-01
  • winfrom 打印表格 字符串的封裝實(shí)現(xiàn)代碼 附源碼下載

    winfrom 打印表格 字符串的封裝實(shí)現(xiàn)代碼 附源碼下載

    以前寫打印都是根據(jù)打印機(jī)的型號(hào),找開發(fā)類庫(kù)。然后在此基礎(chǔ)上開發(fā)。寫的多了自然就想到了封裝。這是還是想到了微軟,微軟封裝了PrintDocument的打印類。但這只是在低層對(duì)串口的封裝
    2013-02-02

最新評(píng)論

咸丰县| 大厂| 安仁县| 潜江市| 烟台市| 陇川县| 宁武县| 枝江市| 抚顺市| 静宁县| 德阳市| 若尔盖县| 高清| 辉南县| 夏河县| 永寿县| 南雄市| 汉川市| 韩城市| 邹城市| 垦利县| 苍梧县| 建始县| 东乌珠穆沁旗| 巧家县| 杂多县| 攀枝花市| 九龙县| 余江县| 黄冈市| 东辽县| 大化| 英德市| 咸丰县| 喀喇| 江北区| 富阳市| 金秀| 长宁县| 电白县| 襄汾县|