日期:2014-05-18 浏览次数:21049 次
?
??? 读者可以依此类推,通过按下某些键可以实现一些自定义的功能,只要修改下面代码中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重复) //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效 KeyModifiers fsModifiers, 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();