加载中…
个人资料
凌晨三秒
凌晨三秒 新浪个人认证
  • 博客等级:
  • 博客积分:0
  • 博客访问:167,085
  • 关注人气:17
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

C#自定义快捷键实现介绍

(2012-12-29 15:01:50)
标签:

c

快捷键

winfrom

杂谈

分类: 技术

C#自定义快捷键实现介绍

这篇文章以按下Ctrl+Shift+0实现显示桌面为例,采用C#编写的程序代码说明C#自定义快捷键的实现。

    读者可以依此类推,通过按下某些键可以实现一些自定义的功能,只要修改下面代码中RegisterHotKey 的参数和case语句中的执行内容即可。

    下面给的示例程序中关键处都具有注释。

    下面给出一个完整的可运行的C#编写的示例程序

    打开VS2005集成开发环境,新建一个windows应用程序,下面的是Form1.cs的全部代码。

    (说明:要使该程序正确运行,必须把下面代码中的C:/ShowDesktop.scf替换成你本机的“显示桌面.scf”文件所在的路径)

C#自定义快捷键实现代码

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel; 
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Text;  
  7. using System.Windows.Forms;  
  8.  
  9. //要使用DllImport语句必须引用该命名空间  
  10. using System.Runtime.InteropServices; 
  11.  
  12. //要使用Process语句必须引用该命名空间  
  13. using System.Diagnostics; 
  14.  
  15. namespace WindowsApplication4  
  16.  
  17. public partial class Form1 : Form  
  18.  
  19. //user32.dll是非托管代码,不能用命名空间的方式直接引用,
  20. //所以需要用“DllImport”进行引入后才能使用  
  21. [DllImport("user32.dll", SetLastError = true)]  
  22. public static extern bool RegisterHotKey(  
  23. IntPtr hWnd, //要定义热键的窗口的句柄  
  24. int id, //定义热键ID(不能与其它ID重复) 
  25. //标识热键是否在按Alt、Ctrl、Shift、Windows等键时才会生效
  26. KeyModifiers fsModifiers,  
  27. Keys vk //定义热键的内容  
  28. ); 
  29.  
  30. [DllImport("user32.dll", SetLastError = true)]  
  31. public static extern bool UnregisterHotKey(  
  32. IntPtr hWnd, //要取消热键的窗口的句柄  
  33. int id //要取消热键的ID 
  34.  
  35. ); 
  36.  
  37. //定义了辅助键的名称(将数字转变为字符以便于记忆,也可去除此枚举而直接使用数值)  
  38. [Flags()]  
  39. public enum KeyModifiers  
  40.  
  41. None = 0,  
  42. Alt = 1,  
  43. Ctrl = 2, 
  44. Shift = 4,  
  45. WindowsKey = 8,  
  46. CtrlAndShift = 6  
  47.  
  48.  
  49. private void Form1_Load(object sender, EventArgs e)  
  50.  
  51. //注册热键Shift+S,Id号为100。KeyModifiers.Shift也可以直接使用数字4来表示。 
  52. RegisterHotKey(Handle, 100, KeyModifiers.Shift, Keys.S);  
  53. //注册热键Ctrl+B,Id号为101。KeyModifiers.Ctrl也可以直接使用数字2来表示。 
  54. RegisterHotKey(Handle, 101, KeyModifiers.Ctrl, Keys.B);  
  55. //注册热键Alt+D,Id号为102。KeyModifiers.Alt也可以直接使用数字1来表示。  
  56. RegisterHotKey(Handle, 102, KeyModifiers.Alt, Keys.D); 
  57. //注册热键Ctrl+Alt+0,Id号为103。KeyModifiers.CtrlAndAlt也可以直接使用数字3来表示。  
  58. RegisterHotKey(Handle, 103, KeyModifiers.CtrlAndShift, Keys.D0); 
  59.  
  60.  
  61. private void Form1_FormClosing(object sender, FormClosingEventArgs e)  
  62.  
  63. //注销Id号为100的热键设定  
  64. UnregisterHotKey(Handle, 100);  
  65. //注销Id号为101的热键设定  
  66. UnregisterHotKey(Handle, 101);  
  67. //注销Id号为102的热键设定  
  68. UnregisterHotKey(Handle, 102);  
  69. //注销Id号为103的热键设定  
  70. UnregisterHotKey(Handle, 103);  
  71.  
  72. protected override void WndProc(ref Message m)  
  73.  
  74. const int WM_HOTKEY = 0x0312;  
  75. //按快捷键  
  76. switch (m.Msg)  
  77.  
  78. case WM_HOTKEY:  
  79. switch (m.WParam.ToInt32())  
  80.  
  81. case 100: //按下的是Shift+S  
  82. //此处填写快捷键响应代码  
  83. break 
  84. case 101: //按下的是Ctrl+B  
  85. //此处填写快捷键响应代码  
  86. break 
  87. case 102: //按下的是Alt+D  
  88. //此处填写快捷键响应代码  
  89. break 
  90. case 103: //按下的是Ctrl+Shift+0  
  91.  
  92. Process Myprocess;  
  93. try 
  94.  
  95. //这段程序功能为:按下Ctrl+Shift+0后显示桌面  
  96. Myprocess = new System.Diagnostics.Process();  
  97. Myprocess.StartInfo.FileName = @"C:/ShowDesktop.scf";  
  98. Myprocess.StartInfo.Verb = "Open";  
  99. Myprocess.Start();  
  100.  
  101. catch (Exception ex)  
  102.  
  103. //程序出错时提示信息  
  104. MessageBox.Show(
  105. ex.Message, "信息提示!", MessageBoxButtons.OK, MessageBoxIcon.Information);  
  106.  
  107. break 
  108.  
  109.  
  110. break 
  111.  
  112. base.WndProc(ref m);  
  113.  
  114. public Form1()  
  115.  
  116. InitializeComponent();  
  117.  
  118.  

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有