C#挪用體系API指定快捷鍵的辦法。本站提示廣大學習愛好者:(C#挪用體系API指定快捷鍵的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C#挪用體系API指定快捷鍵的辦法正文
本文實例講述了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#法式設計有所贊助。