亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#調用系統API指定快捷鍵的方法

2020-01-24 01:46:47
字體:
來源:轉載
供稿:網友

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

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

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

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

方法一

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

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.");}}

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

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

第一步.引用命名空間

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

添加此命名空間.C#中調用系統API都會用到這玩藝的.
 
第二步.申明API函數RegisterHotKey

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

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

第二步已經給你整出個函數了.現在你就像用普通函數一樣來用就行.假如就在頁面剛加載時就調用此函數吧.

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

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

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

第四步.重寫函數WndProc

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

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品扒开腿做爽爽爽男男| 国产成人精品一区二区在线| 欧美成人午夜剧场免费观看| 欧美精品情趣视频| 久久久久中文字幕2018| 欧美午夜精品久久久久久久| 亚洲日本中文字幕| 国产婷婷成人久久av免费高清| 成人国产精品日本在线| 亚洲国产小视频在线观看| 日韩在线视频观看正片免费网站| 亚洲欧美综合另类中字| 亚洲影视中文字幕| 高清视频欧美一级| 在线成人激情黄色| 亚洲国产小视频在线观看| 亚洲国模精品一区| 91免费看视频.| 国产精品444| 在线免费观看羞羞视频一区二区| 亚洲国产91色在线| 国产专区精品视频| 国产97在线亚洲| 日韩国产欧美精品在线| 亚洲第一av网站| 国产精品电影观看| 成人淫片在线看| 欧美xxxwww| 国产裸体写真av一区二区| 欧美日韩一二三四五区| 国产精品91久久久| 一区二区三区 在线观看视| 一区二区中文字幕| 中文字幕视频一区二区在线有码| 亚洲激情自拍图| 国产精品成人一区二区| 91久久嫩草影院一区二区| 日本一区二三区好的精华液| 午夜精品www| 91高清视频免费观看| 日韩激情视频在线| 欧美精品电影在线| 青草青草久热精品视频在线网站| 性欧美xxxx视频在线观看| 亚洲第一网站免费视频| 午夜精品一区二区三区在线视频| 亚洲第一免费播放区| 91亚洲精品在线| 欧美老女人xx| 中文字幕精品在线| 欧美日韩国产色视频| 久久精品电影一区二区| 成人国产精品久久久| 亚洲国产精品va在线看黑人| 国产成人一区二区三区电影| 久久久久久久久综合| 成人欧美一区二区三区黑人| 久久国产天堂福利天堂| 国产欧美精品一区二区三区-老狼| 日韩人体视频一二区| 91精品视频专区| 国产亚洲精品激情久久| 久久中文字幕在线视频| 日本不卡视频在线播放| 91黑丝在线观看| 欧美激情视频网站| 久久99久久久久久久噜噜| 久久精品中文字幕电影| 国产欧美精品xxxx另类| 国产欧美精品久久久| 久久精品国产视频| 欧美一区在线直播| 97超碰色婷婷| 国产精品日韩在线一区| 性视频1819p久久| 色偷偷88888欧美精品久久久| 精品亚洲男同gayvideo网站| 久久69精品久久久久久国产越南| 欧美日韩国产一区中文午夜| 欧美性猛交99久久久久99按摩| 91成人精品网站| 一个色综合导航| 久久99精品久久久久久噜噜| 日韩欧美一区视频| 亚洲护士老师的毛茸茸最新章节| 国产精品偷伦视频免费观看国产| 午夜精品久久久99热福利| 日韩中文理论片| 国产一区二区黑人欧美xxxx| 国产精品久久久久久亚洲调教| 成人精品福利视频| 精品少妇一区二区30p| 欧美成年人视频网站欧美| 亚洲一区国产精品| 亚洲免费高清视频| 91av在线播放视频| 欧美一级黄色网| 国产欧美日韩中文字幕在线| 美女精品视频一区| 欧美亚洲视频在线观看| 国产视频精品自拍| 中文字幕成人精品久久不卡| 一区二区福利视频| 国产精品日韩久久久久| 欧美性jizz18性欧美| 国产日韩欧美中文在线播放| 欧美二区在线播放| 亚洲国产日韩欧美在线图片| 成人写真视频福利网| 国产这里只有精品| 国产成人精品一区二区在线| 国产精品美女久久| 亚洲精品国产suv| 俺去了亚洲欧美日韩| 国产精品av网站| 最近更新的2019中文字幕| 欧美日韩国产丝袜另类| 日韩美女视频在线观看| 久久在线精品视频| 亚洲激情 国产| 亚洲精品中文字幕av| 亚洲成人激情小说| 欧美性做爰毛片| 久久久久久久香蕉网| 久久久国产精品x99av| 亚洲黄色在线观看| 久久久久久久一| 亚洲片国产一区一级在线观看| 欧美午夜片欧美片在线观看| 亚洲国产成人精品电影| 中文字幕v亚洲ⅴv天堂| 色综合视频一区中文字幕| 国产精品久久久久久婷婷天堂| 成人免费xxxxx在线观看| 久久精品国产视频| 欧美日韩中文字幕在线视频| 日韩中文字幕国产精品| 亚洲免费伊人电影在线观看av| 狠狠干狠狠久久| 欧美一级片免费在线| 韩曰欧美视频免费观看| 久久综合久久美利坚合众国| 久久久久久久久久国产精品| 国产专区精品视频| 亚洲综合在线做性| 在线日韩中文字幕| 日韩中文字在线| 亚洲免费中文字幕| 亚洲欧美国产一本综合首页| 日韩精品视频在线免费观看| 国产精品成人一区二区三区吃奶| 精品亚洲一区二区三区在线播放| 亚洲新声在线观看| 日韩在线观看免费网站| 欧美亚洲伦理www| 久久精品国产一区二区三区| 国产在线观看一区二区三区| 精品国产一区二区三区久久狼5月| 久久精品视频亚洲| 最新国产成人av网站网址麻豆| 亚洲综合自拍一区| 欧洲美女7788成人免费视频| 亚洲国产精品专区久久| 欧美自拍视频在线|