给窗口设置系统级或窗口级的热键
開(kāi)發(fā)環(huán)境:VS2005, C#語(yǔ)言
為了給一個(gè)程序加一個(gè)系統(tǒng)級(jí)的熱鍵,在開(kāi)發(fā)時(shí)需要使用到下面的代碼,就是在程序中注冊(cè)和卸載熱鍵。
?
1。首先在Form1類的函數(shù)中添加如下代碼:
[DllImport("user32.dll")]
??????? private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, Keys vk);
??????? [DllImport("user32.dll")]
??????? private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
?
?
注意,使用上面的代碼前,必須使用"using System.Runtime.InteropServices;"來(lái)引入命名空間。
?
2。在Form1的構(gòu)造函數(shù)中注冊(cè)熱鍵:
public Form1()
{
??? RegisterHotKey(Handle, 100, 0, Keys.Escape);??? //注冊(cè)熱鍵: Esc
}
?
3. 重寫(xiě)窗口的WndProc函數(shù):
protected override void WndProc(ref Message m)
??????? {
??????????? if (m.Msg == 0x312)
??????????? {
??????????????? if (m.WParam.ToInt32() == 100)
??????????????????? this.Close();?????????????????????????????????????? //當(dāng)按下Esc鍵時(shí)關(guān)閉本窗口
??????????? }
??????????? base.WndProc(ref m);
??????? }
?
4。在析構(gòu)函數(shù)中卸載熱鍵:
~Form1()
{
??? UnregisterHotKey(Handle, 100);????????????????? //窗口未激活時(shí)卸載熱鍵???????????
}
?
這樣就完成了我們的所有設(shè)置。但是這個(gè)添加的熱鍵是系統(tǒng)級(jí)熱鍵,也就是說(shuō)不管這個(gè)窗口有沒(méi)有被激活,這個(gè)熱鍵都是能起作用的。
?
但是有時(shí)我們并不希望這種熱鍵是系統(tǒng)級(jí)的,而是希望當(dāng)前窗口被激活時(shí),該熱鍵才起作用,如果沒(méi)有被激活,該熱鍵不起作用。于是,我想了辦法,就是更改熱鍵注冊(cè)和卸載的時(shí)間。
思路:在Form1的Form1_Activated事件中注冊(cè)熱鍵,在Form1_Deactivate中卸載熱鍵,其他不變,代碼如下:
private void Form1_Activated(object sender, EventArgs e)
??????? {
??????????? RegisterHotKey(Handle, 100, 0, Keys.Escape);??? //在窗口激活時(shí)注冊(cè)熱鍵: Esc
??????? }
??????? private void Form1_Deactivate(object sender, EventArgs e)
??????? {
??????????? UnregisterHotKey(Handle, 100);????????????????? //窗口未激活時(shí)卸載熱鍵???????????
??????? }
?
這樣就達(dá)到了窗口級(jí)的熱鍵。
?
根據(jù)同樣的思路,你可以選擇其他的時(shí)機(jī)來(lái)注冊(cè)或卸載熱鍵!
總結(jié)
以上是生活随笔為你收集整理的给窗口设置系统级或窗口级的热键的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: el-table使用fixed后,最后一
- 下一篇: 医院后勤管理软件系统助力医院后勤管理实施