C#自定義快捷鍵的實現
作者:84923_cn
本文主要介紹如何實現C#自定義快捷鍵(系統熱鍵),例如QQ軟件的Ctrl+Enter快捷鍵用來發送消息。
這篇文章以按下Ctrl+Shift+0實現顯示桌面為例,采用C#編寫的程序代碼說明C#自定義快捷鍵的實現。
讀者可以依此類推,通過按下某些鍵可以實現一些自定義的功能,只要修改下面代碼中RegisterHotKey 的參數和case語句中的執行內容即可。
下面給的示例程序中關鍵處都具有注釋。
下面給出一個完整的可運行的C#編寫的示例程序
打開VS2005集成開發環境,新建一個windows應用程序,下面的是Form1.cs的全部代碼。
(說明:要使該程序正確運行,必須把下面代碼中的C:\ShowDesktop.scf替換成你本機的“顯示桌面.scf”文件所在的路徑)
C#自定義快捷鍵實現代碼
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- //要使用DllImport語句必須引用該命名空間
- using System.Runtime.InteropServices;
- //要使用Process語句必須引用該命名空間
- using System.Diagnostics;
- namespace WindowsApplication4
- {
- public partial class Form1 : Form
- {
- //user32.dll是非托管代碼,不能用命名空間的方式直接引用,所以需要用“DllImport”進行引入后才能使用
- [DllImport("user32.dll", SetLastError = true)]
- public static extern bool RegisterHotKey(
- IntPtr hWnd, //要定義熱鍵的窗口的句柄
- int id, //定義熱鍵ID(不能與其它ID重復)
- KeyModifiers fsModifiers, //標識熱鍵是否在按Alt、Ctrl、Shift、Windows等鍵時才會生效
- Keys vk //定義熱鍵的內容
- );
- [DllImport("user32.dll", SetLastError = true)]
- public static extern bool UnregisterHotKey(
- IntPtr hWnd, //要取消熱鍵的窗口的句柄
- int id //要取消熱鍵的ID
- );
- //定義了輔助鍵的名稱(將數字轉變為字符以便于記憶,也可去除此枚舉而直接使用數值)
- [Flags()]
- public enum KeyModifiers
- {
- None = 0,
- Alt = 1,
- Ctrl = 2,
- Shift = 4,
- WindowsKey = 8,
- CtrlAndShift = 6
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- //注冊熱鍵Shift+S,Id號為100。KeyModifiers.Shift也可以直接使用數字4來表示。
- RegisterHotKey(Handle, 100, KeyModifiers.Shift, Keys.S);
- //注冊熱鍵Ctrl+B,Id號為101。KeyModifiers.Ctrl也可以直接使用數字2來表示。
- RegisterHotKey(Handle, 101, KeyModifiers.Ctrl, Keys.B);
- //注冊熱鍵Alt+D,Id號為102。KeyModifiers.Alt也可以直接使用數字1來表示。
- RegisterHotKey(Handle, 102, KeyModifiers.Alt, Keys.D);
- //注冊熱鍵Ctrl+Alt+0,Id號為103。KeyModifiers.CtrlAndAlt也可以直接使用數字3來表示。
- RegisterHotKey(Handle, 103, KeyModifiers.CtrlAndShift, Keys.D0);
- }
- private void Form1_FormClosing(object sender, FormClosingEventArgs e)
- {
- //注銷Id號為100的熱鍵設定
- UnregisterHotKey(Handle, 100);
- //注銷Id號為101的熱鍵設定
- UnregisterHotKey(Handle, 101);
- //注銷Id號為102的熱鍵設定
- UnregisterHotKey(Handle, 102);
- //注銷Id號為103的熱鍵設定
- UnregisterHotKey(Handle, 103);
- }
- protected override void WndProc(ref Message m)
- {
- const int WM_HOTKEY = 0x0312;
- //按快捷鍵
- switch (m.Msg)
- {
- case WM_HOTKEY:
- switch (m.WParam.ToInt32())
- {
- case 100: //按下的是Shift+S
- //此處填寫快捷鍵響應代碼
- break;
- case 101: //按下的是Ctrl+B
- //此處填寫快捷鍵響應代碼
- break;
- case 102: //按下的是Alt+D
- //此處填寫快捷鍵響應代碼
- break;
- case 103: //按下的是Ctrl+Shift+0
- {
- Process Myprocess;
- try
- {
- //這段程序功能為:按下Ctrl+Shift+0后顯示桌面
- Myprocess = new System.Diagnostics.Process();
- Myprocess.StartInfo.FileName = @"C:\ShowDesktop.scf";
- Myprocess.StartInfo.Verb = "Open";
- Myprocess.Start();
- }
- catch (Exception ex)
- {
- //程序出錯時提示信息
- MessageBox.Show(ex.Message, "信息提示!", MessageBoxButtons.OK, MessageBoxIcon.Information);
- }
- break;
- }
- }
- break;
- }
- base.WndProc(ref m);
- }
- public Form1()
- {
- InitializeComponent();
- }
- }
- }
通過上述代碼就實現了C#自定義快捷鍵的設置,大家可以嘗試一下。
【編輯推薦】
責任編輯:book05
來源:
hi.baidu