给窗口设置系统级或窗口级的热键
開發環境:VS2005, C#語言
為了給一個程序加一個系統級的熱鍵,在開發時需要使用到下面的代碼,就是在程序中注冊和卸載熱鍵。
?
1。首先在Form1類的函數中添加如下代碼:
[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;"來引入命名空間。
?
2。在Form1的構造函數中注冊熱鍵:
public Form1()
{
??? RegisterHotKey(Handle, 100, 0, Keys.Escape);??? //注冊熱鍵: Esc
}
?
3. 重寫窗口的WndProc函數:
protected override void WndProc(ref Message m)
??????? {
??????????? if (m.Msg == 0x312)
??????????? {
??????????????? if (m.WParam.ToInt32() == 100)
??????????????????? this.Close();?????????????????????????????????????? //當按下Esc鍵時關閉本窗口
??????????? }
??????????? base.WndProc(ref m);
??????? }
?
4。在析構函數中卸載熱鍵:
~Form1()
{
??? UnregisterHotKey(Handle, 100);????????????????? //窗口未激活時卸載熱鍵???????????
}
?
這樣就完成了我們的所有設置。但是這個添加的熱鍵是系統級熱鍵,也就是說不管這個窗口有沒有被激活,這個熱鍵都是能起作用的。
?
但是有時我們并不希望這種熱鍵是系統級的,而是希望當前窗口被激活時,該熱鍵才起作用,如果沒有被激活,該熱鍵不起作用。于是,我想了辦法,就是更改熱鍵注冊和卸載的時間。
思路:在Form1的Form1_Activated事件中注冊熱鍵,在Form1_Deactivate中卸載熱鍵,其他不變,代碼如下:
private void Form1_Activated(object sender, EventArgs e)
??????? {
??????????? RegisterHotKey(Handle, 100, 0, Keys.Escape);??? //在窗口激活時注冊熱鍵: Esc
??????? }
??????? private void Form1_Deactivate(object sender, EventArgs e)
??????? {
??????????? UnregisterHotKey(Handle, 100);????????????????? //窗口未激活時卸載熱鍵???????????
??????? }
?
這樣就達到了窗口級的熱鍵。
?
根據同樣的思路,你可以選擇其他的時機來注冊或卸載熱鍵!
總結
以上是生活随笔為你收集整理的给窗口设置系统级或窗口级的热键的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: el-table使用fixed后,最后一
- 下一篇: Oracle数据库在Nokia