• 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#实现的SN快速输入工具实例

C#实现的SN快速输入工具实例

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

通过本文主要向大家介绍了c#web开发实例,c#串口编程实例,c#窗口界面设计实例,c#实例视频教程,c#项目实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了C#实现的SN快速输入工具的方法。分享给大家供大家参考。具体实现方法分析如下:

一般软件都要输入序列号(SN),而大家平时用的最多的恐怕是盗版软件,通常盗版软件的序列号(SN)都保存成:XXXXX-XXXXX-XXXX-XXXX的形式。

而软件输入序列号的地方通常都是几个文本框(TextBox)组成。一个个的将XXXXX复制到文本框将非常麻烦。于是SN快速输入工具便由此产生了。

当然这些都和我的编写这个程序的原因无关。我编写这个程序的原因纯粹是因为有个网友和他舅舅打赌说要编写个程序,而他舅舅就是要他编写这个程序,但可惜我的这位网友才是个编程初学者(比我更菜的菜鸟),当然完成不了这个看似简单,实际要用到许多编程知识的程序咯。

要做这个程序,首先当然是要了解程序的功能了。它的功能就是要让你复制完了形式如“XXXXX-XXXXX-XXXX-XXXX”的序列号之后,当你把鼠标指向文本框,程序能自动将XXXXX添加到相应的文本框中。

既然是要处理复制的序列号,那么我们肯定要用到和剪贴板相关的东西了。剪贴板,还好这个我以前在C#中用过N次了,不用再查windows api了。C#里面本来就提供了Clipboard这个类。

于是就用到了string Clipboard.GetText()这个静态方法,将刚才复制的带-的序列号取出来,然后用个string类型的变量strKeys保存在我的程序中,以便使用。

第一步,从剪贴板里面取数据,我们就完成了。

接着,我们该考虑怎么处理我们的数据了,我们的数据最后是要写到几个连续的文本框中的,那么我们可以考虑通过String.Split(char[],string splitoption)这个方法将序列号分割成几个子字符串,然后再通过windows api讲文本输出到相应的textbox句柄上。但是这样做无疑增加了程序的难度,几个连续的文本框的切换,使用Tab键就能做到了,然后将文本输出到文本框中,直接让键盘打出来就ok了。那么很明显,我们只需要将我们要按的键模拟出来就行了,这个时候我首先想到的是windows api中键盘模拟事件keybd_event,于是我开始在MSDN中查询keybd_event方法,方法中有个KEYEVENTF_KEYUP这个参数,但是我不知道他相应的值,于是我开始查找这个长整形的值。但是始终都找不到,就在我在MSDN中查找KEYUP相关的东西的时候,我突然发现了System.Windows.Form.SendKeys这个类。原来.net framework已经将keybd_event这个非托管对象的方法封装到SendKeys这个类中了,直接使用SendKeys这个类就可以模拟键盘操作了。

再查询Tab键的写法就是{Tab}。

那么我只要将原来文本strKeys中的-全部转换成{Tab}然后再交给SendKeys这个类来处理,这个程序就基本完成了。

于是有了
SendKeys.Send(strKeys);</div>

这两行代码。

这样就有了我的程序的主过程:
{
 strKeys = Clipboard.GetText();
 strKeys.Replace("-", "{TAB}");
 SendKeys.Send(strKeys);
}</div>

但是我们怎么通过快捷键来触发,来完成这个过程了。

于是我开始在百度和MSDN查找相关处理全局快捷键的windows api的资料。

要设置快捷键必须使用user32.dll下面的两个方法。
 HWND hWnd,
 int id,
 UINT fsModifiers,
 UINT vk
);</div>

和
 HWND hWnd,
 int id
);</div>

转换成C#代码,那么首先就要引用命名空间System.Runtime.InteropServices;来加载非托管类user32.dll。于是有了:
public static extern bool RegisterHotKey(
 IntPtr hWnd, // handle to window
 int id, // hot key identifier
 KeyModifiers fsModifiers, // key-modifier options
 Keys vk // virtual-key code
);

[DllImport("user32.dll", SetLastError=true)]
public static extern bool UnregisterHotKey(
 IntPtr hWnd, // handle to window
 int id // hot key identifier
);

[Flags()]
public enum KeyModifiers
{
 None = 0,
 Alt = 1,
 Control = 2,
 Shift = 4,
 Windows = 8
}</div>

这是注册和卸载全局快捷键的方法,那么我们只需要在Form_Load的时候加上注册快捷键的语句,在FormClosing的时候卸载全局快捷键。同时,为了保证剪贴板的内容不受到其他程序调用剪贴板的干扰,在Form_Load的时候,我先将剪贴板里面的内容清空。

于是有了:
{
 label2.AutoSize = true;

 Clipboard.Clear();//先清空剪贴板防止剪贴板里面先复制了其他内容
 RegisterHotKey(Handle, 100, 0, Keys.F10);
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
 UnregisterHotKey(Handle, 100);//卸载快捷键
}</div>

那么我们在别的窗口,怎么让按了快捷键以后调用我的主过程ProcessHotkey()呢?

那么我们就必须重写WndProc()方法,通过监视系统消息,来调用过程:
{
 const int WM_HOTKEY = 0x0312;//按快捷键
 switch (m.Msg)
 {
  case WM_HOTKEY:
   ProcessHotkey();//调用主处理程序
   break;
 }
 base.WndProc(ref m);
}</div>

至此我们的程序就完成了。

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

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

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

  • C#实现文件上传与下载功能实例
  • C#登入实例
  • c#版在pc端发起微信扫码支付的实例
  • C#装箱和拆箱操作实例分析
  • C#实现的一款比较美观的验证码完整实例
  • C#递归方法实现无限级分类显示效果实例
  • c#读取excel方法实例分析
  • C#实现抓取和分析网页类实例
  • C#事件用法实例浅析
  • C#中委托用法实例分析

相关文章

  • 2017-05-28WPF MVVM示例讲解
  • 2017-05-28C#实现Winform动态添加菜单的方法
  • 2017-05-28C#获取动态生成的CheckBox值
  • 2017-05-28C#序列化与反序列化实例
  • 2017-05-28C#递归算法之归并排序
  • 2017-05-28C#中的正则表达式介绍
  • 2017-05-28C#中string和StingBuilder内存中的区别实例分析
  • 2017-05-28C#通过XML节点属性/属性值读取写入XML操作代码实例
  • 2017-05-28C#开发教程之ftp操作方法整理
  • 2017-05-28详解C#读取Appconfig中自定义的节点

文章分类

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

最近更新的内容

    • C#实现3步手动建DataGridView的方法
    • C#中const用法详解
    • C#使用UdpClient类进行简单通信的实例
    • C#播放铃声最简单实现方法
    • HighCharts图表控件在ASP.NET WebForm中的使用总结(全)
    • C# IEnumerable和IEnumerator接口浅析
    • .NET中保证线程安全的高级方法Interlocked类使用介绍
    • C#操作Access通用类实例
    • C#环形缓冲区(队列)完全实现
    • C#网页跳转方法总结

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

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