知识大全 用C#代码编写的SN快速输入工具
Posted 知
篇首语:幽沉谢世事,俯默窥唐虞。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用C#代码编写的SN快速输入工具相关的知识,希望对你有一定的参考价值。
用C#代码编写的SN快速输入工具 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
一般软件都要输入序列号(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这个类 原 framework已经将keybd_event这个非托管对象的方法封装到SendKeys这个类中了 直接使用SendKeys这个类就可以模拟键盘操作了 再查询Tab键的写法就是Tab 那么我只要将原来文本strKeys中的 全部转换成Tab然后再交给SendKeys这个类来处理 这个程序就基本完成了 于是有了strKeys Replace( TAB );SendKeys Send(strKeys);
这两行代码 这样就有了我的程序的主过程 private void ProcessHotkey()//主处理程序 strKeys = Clipboard GetText(); strKeys Replace( TAB ); SendKeys Send(strKeys);
但是我们怎么通过快捷键来触发 来完成这个过程了 于是我开始在百度和MSDN查找相关处理全局快捷键的windows api的资料 要设置快捷键必须使用user dll下面的两个方法 BOOL RegisterHotKey( HWND hWnd int id UINT fsModifiers UINT vk);
和BOOL UnregisterHotKey( HWND hWnd int id);
转换成C#代码 那么首先就要引用命名空间System Runtime InteropServices;来加载非托管类user dll 于是有了 [DllImport( user dll SetLastError=true)] 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( user dll SetLastError=true)] public static extern bool UnregisterHotKey( IntPtr hWnd // handle to window int id // hot key identifier );[Flags()] public enum KeyModifiers None = Alt = Control = Shift = Windows =
这是注册和卸载全局快捷键的方法 那么我们只需要在Form_Load的时候加上注册快捷键的语句 在FormClosing的时候卸载全局快捷键 同时 为了保证剪贴板的内容不受到其他程序调用剪贴板的干扰 在Form_Load的时候 我先将剪贴板里面的内容清空 于是有了 private void Form _Load(object sender System EventArgs e) label AutoSize = true; Clipboard Clear();//先清空剪贴板防止剪贴板里面先复制了其他内容 RegisterHotKey(Handle Keys F );private void Form _FormClosing(object sender FormClosingEventArgs e) UnregisterHotKey(Handle );//卸载快捷键
那么我们在别的窗口 怎么让按了快捷键以后调用我的主过程ProcessHotkey()呢? 那么我们就必须重写WndProc()方法 通过监视系统消息 来调用过程 protected override void WndProc(ref Message m)//监视Windows消息 const int WM_HOTKEY = x ;//按快捷键 switch (m Msg) case WM_HOTKEY: ProcessHotkey();//调用主处理程序 break; base WndProc(ref m);
这样我的程序就完成了
using System;using System Drawing;using System Collections;using System ComponentModel;using System Windows Forms;using System Data;using System Runtime InteropServices;namespace WindowsApplication /// /// Form 的摘要说明 /// public class Form : System Windows Forms Form /// /// 必需的设计器变量 /// private System ComponentModel Container ponents = null; public Form () // // Windows 窗体设计器支持所必需的 // InitializeComponent(); // // TODO: 在 InitializeComponent 调用后添加任何构造函数代码 // /// /// 清理所有正在使用的资源 /// protected override void Dispose( bool disposing ) if( disposing ) if (ponents != null) ponents Dispose(); base Dispose( disposing ); #region Windows 窗体设计器生成的代码 /// /// 设计器支持所需的方法 不要使用代码编辑器修改 /// 此方法的内容 /// private void InitializeComponent() this label = new System Windows Forms Label(); this label = new System Windows Forms Label(); this label = new System Windows Forms Label(); this label = new System Windows Forms Label(); this label = new System Windows Forms Label(); this SuspendLayout(); // // label // this label AutoSize = true; this label Location = new System Drawing Point( ); this label Name = label ; this label Size = new System Drawing Size( ); this label TabIndex = ; this label Text = EoS tion制作 ; // // label // this label AutoSize = true; this label Location = new System Drawing Point( ); this label Name = label ; this label Size = new System Drawing Size( ); this label TabIndex = ; this label Text = 使用方法 ; // // label // this label AutoSize = true; this label Location = new System Drawing Point( ); this label Name = label ; this label Size = new System Drawing Size( ); this label TabIndex = ; this label Text = 将序列号拷贝到剪切板 ; // // label // this label AutoSize = true; this label Location = new System Drawing Point( ); this label Name = label ; this label Size = new System Drawing Size( ); this label TabIndex = ; this label Text = 将光标定位到序列号输入处 ; // // label // this label AutoSize = true; this label Location = new System Drawing Point( ); this label Name = label ; this label Size = new System Drawing Size( ); this label TabIndex = ; this label Text = 按F 键 ; // // Form // this AutoScaleBaseSize = new System Drawing Size( ); this ClientSize = new System Drawing Size( ); this Controls Add(this label ); this Controls Add(this label ); this Controls Add(this label ); this Controls Add(this label ); this Controls Add(this label ); this Name = Form ; this Text = SN输入工具(C#版Version ) ; this FormClosing += new System Windows Forms FormClosingEventHandler(this Form _FormClosing); this Load += new System EventHandler(this Form _Load); this ResumeLayout(false); this PerformLayout(); #endregion /// /// 应用程序的主入口点 /// [STAThread] static void Main() Application Run(new Form ()); [DllImport( user dll SetLastError=true)] 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( user dll SetLastError=true)] public static extern bool UnregisterHotKey( IntPtr hWnd // handle to window int id // hot key identifier ); [Flags()] public enum KeyModifiers None = Alt = Control = Shift = Windows = private void ProcessHotkey()//主处理程序 strKeys = Clipboard GetText(); strKeys Replace( TAB ); SendKeys Send(strKeys); private Label label ; private Label label ; private Label label ; private Label label ; private Label label ; string strKeys; private void Form _Load(object sender System EventArgs e) label AutoSize = true; Clipboard Clear();//先清空剪贴板防止剪贴板里面先复制了其他内容 RegisterHotKey(Handle Keys F ); private void Form _FormClosing(object sender FormClosingEventArgs e) UnregisterHotKey(Handle );//卸载快捷键 protected override void WndProc(ref Message m)//循环监视Windows消息 const int WM_HOTKEY = x ;//按快捷键 switch (m Msg) case WM_HOTKEY: ProcessHotkey();//调用主处理程序 break; base WndProc(ref m);
cha138/Article/program/net/201311/11597 相关参考
知识大全 c#做的计算器,如何在下次输入数字时,textbox里的结果自动清除
c#做的计算器,如何在下次输入数字时,textbox里的结果自动清除你可以增加一个按钮控件,命为清空具体是双击控件,进入后台编写代码即可实现publicvoidButton_click(.....)t
Eclipse工具开发:编写代码生成器[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs
Eclipse工具开发:编写代码生成器[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs
Eclipse工具开发:编写代码生成器[6] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs
Eclipse工具开发:编写代码生成器[5] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs
Eclipse工具开发:编写代码生成器[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs
Eclipse工具开发:编写代码生成器[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs
用C#编写ActiveX控件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!首先建立一个WinFor
在互连网广泛应用的今天将有用的信息下载到本地是一件很普遍的事当然这个过程我们可以通过许多下载工具实现目前的这些下载工具绝大多数都是使用协议完成的虽然使用编写下载工具是一种很简单的方法但美中不足的是
用C#编写发手机中文短信息Windows服务 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 最近