• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#调用系统API指定快捷键的方法

C#调用系统API指定快捷键的方法

作者:聪明的笨蛋 字体:[增加 减小] 来源:互联网 时间:2017-05-28

聪明的笨蛋 通过本文主要向大家介绍了c#格式化代码快捷键,c#快捷键,c#注释快捷键,c#代码对齐快捷键,c#快捷键设置等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了C#调用系统API指定快捷键的方法。分享给大家供大家参考。具体分析如下:

快捷键的作用大家都清楚,就是快捷嘛,操作起来方便.用电脑的人很少有没用过Ctrl + C 和Ctrl + V的. 其他很多软件也有各种快捷键.电脑自然没那么聪明,知道我们敲哪些键然后给出相应反应,这都得我们自己写代码实现啊.指定快捷键有两种方式.

方法一.当应用程序某个页面获得焦点时,直接写一个该页面的KeyDown事件处理函数就行,非常的简单.我们大多数时候就用的这种快捷键.

方法二.在任何时候都能使用快捷键,此时必须调用系统的API才行.这种情况我们用的不多.不过有个典型的例子,就是通过快捷键切换输入法.输入法的应用程序肯定是通过API处理的.

方法一

我们知道点击鼠标,敲键盘都是触发一个个的事件.那使用快捷键自然是要写个键盘敲击的事件处理函数.我们知道每个控件都可以对应很多事件.所以键盘的的事件处理自然可以和某一个控件关联起来.但一般不怎么样,因为这样的话我们必须得先让此控件获得焦点才行. 而我们很多时候可能希望只要是某个页面打开的情况下,不管焦点在其中的哪个控件上都可以点快捷键键.那我们应该把事件处理与页面(Form)关联起来.假如有页面Form1.对应的事件处理函数如下.

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.A) //快捷键a
{
  MessageBox.Show("hello arwen");
}
else if (e.KeyCode == Keys.F1) //快捷键F1
{
  MessageBox.Show("please help.");
}
else if (e.Control && e.Shift && e.KeyCode == Keys.F)
//快捷键Ctrl + Shift + F
{
  MessageBox.Show("search some info.");
}
else if (e.Alt && e.KeyCode == Keys.X) //快捷键Alt + X
{
  MessageBox.Show("Close.");
}
}
</div>

在函数里面可以通过e.KeyCode判断是敲了哪个键.然后做相应的处理就OK.当然你也可以不用e.KeyCode.而是用e.KeyValue来判断,KeyValue就是每个键上面的字母或符号对应的ASCII 码值.
 
方法二,调用API

调用API最关键的地方就两个
一是调用API函数RegisterHotKey
二是重写函数WndProc.
 
下面就来看下具体的操作过程

第一步.引用命名空间

添加此命名空间.C#中调用系统API都会用到这玩艺的.
 
第二步.申明API函数RegisterHotKey
public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint keyValue, Keys vk);</div>

这样声明下就相当于你自己定义了一个函数RegisterHotKey,你只管在其他任意地方调用就行.只是这里看不到函数的实现,相当于是在user32.dll这里面给你实现了.
 
第三步.调用API函数

第二步已经给你整出个函数了.现在你就像用普通函数一样来用就行.假如就在页面刚加载时就调用此函数吧.
//指定Ctrl + F为快捷键,并与数字888关联</div>

其中handle是啥句柄之类的,你只管写上,具体不用管.在代码里代不会显式用到它.888是啥呢? 第二步中参数列表可以看到这是id,所谓id就是通过一个数字唯一标志啥嘛.所以这里你随便用个啥数都行的.在后面的函数WndProc函数中会用到这数字. 2是keyValue,不过只有几个特殊键的值.比如Ctrl键对应的是2,Shift键对应的是4,Alt键对应的是1.都定好了的,你不能改.Keys.F就指定任意某个键.你可能会问如果是Ctrl + Shift这样的组合怎么办?很简单两数字直接加起来就行.比如
//指定Ctrl +Shift+ S为快捷键,并与数字444关联</div>

第四步.重写函数WndProc

前面三步非常好理解.就是调用个API中的函数嘛.虽然麻烦了点,但原理和调用一般函数差不多.但第四步有点难理解.在前面的方法一中我们知道可以通过调用一个事件处理键盘事件就OK.前面三步还没有涉及到事件的概念.那你自然会想到第四步应该是整个事件处理才行啊.的确如此.在这里就是指定一个事件调用的函数.只不过这个函数你看不到是哪里调用了.实际上是操作系统来调用这函数的.原理有点复杂,可能你得去看下C++的消息处理机制才明白.C#的底层那些实现实际上就是用C++写的嘛.

这一步也可以简单的理解为就是对应方法一中的事件处理函数

protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x0312:
IntPtr id = m.WParam;
switch (id.ToString())
{
case "888":
//这里的888就是前面调用函数RegisterHotKey指定的数字
MessageBox.Show("Help me."); break;
case "444":
MessageBox.Show("Search some info."); break;
}
break;
}
base.WndProc(ref m);
}
</div>

希望本文所述对大家的C#程序设计有所帮助。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#调用系统API指定快捷键的方法

相关文章

  • 2017-05-28使用HttpHanlder处理404:File not found的问题
  • 2017-05-28c# 可疑文件扫描代码(找到木马)(简)
  • 2017-05-28C#线性渐变画刷LinearGradientBrush用法实例
  • 2017-05-28C#获取关键字附近文字算法实例
  • 2017-05-28C#画圆角矩形的方法
  • 2017-05-28C#实现通过ffmpeg从flv视频文件中截图的方法
  • 2017-05-28c#裁剪图片后使用zxing生成二维码示例分享
  • 2017-05-28C#迷你猜数实例分析
  • 2017-05-28解决C#中取消方向键对控件焦点控制的实现方法
  • 2017-05-28C#中跨线程访问控件问题解决方案分享

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#实现获取程序路径方法小结
    • C#逐行读取txt文件的方法
    • C#实现主窗体最小化后出现悬浮框及双击悬浮框恢复原窗体的方法
    • C#实现简单的Http请求实例
    • C#导出网站功能实例代码讲解
    • c#异步读取数据库与异步更新ui的代码实现
    • C# WebClient类用法实例
    • C#实现启用与禁用本地网络的方式小结【3种方式】
    • C#入门之checked和unchecked的区别实例解析
    • c# 引用类型和值类型

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有