摘自《31天学会CRM项目开发<C#编程入门级项目实战>》

使用C#调用Windows API使程序模拟键盘输入,也可模拟按下快捷键。本例中,单击“模拟输入”按钮,可录入字符“abcde123456”,单击“Ctrl+V”按钮可实现粘贴功能,效果如图16-2所示。

主要开发步骤如下:
(1)    引用Windows API函数keybd_event(),通过它可模拟键盘录入。
代码片段16-12

[DllImport("user32.dll")]
private static extern void keybd_event(
byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);

(2)    定义字典keycodedic,用于存储常用虚拟键码,比如点、横杠、方向键等。
代码片段16-13

Dictionary<string, byte> keycodedic;
keycodedic = new Dictionary<string, byte>();
keycodedic.Add("A", 0x41);
keycodedic.Add("B", 0x42);
……
keycodedic.Add(".", );
keycodedic.Add("LEFT", 0x25);
keycodedic.Add("UP", 0x26);
keycodedic.Add("RIGHT", 0x27);
keycodedic.Add("DOWN", );
keycodedic.Add("-", 0x6d);

(3)    片段16-14演示了模拟键盘录入字母和数字的过程,所录入的字符必须先在keycodedic中定义。模拟键盘录入时不能连续不间断的录入,如果两次录入的时间过短且内容一致可能会导致后一次录入无效,如行6所示。
代码片段16-14

public static bool Input(string str)
{
foreach (char ch in str.ToUpper())
{
//模拟单击键,可规避连续输入键值时遗漏或延长Thread.Sleep(50);
keybd_event(0x1, , , );
keybd_event(keycodedic[ch.ToString()], , , );
}
return false;
}

(4)    片段16-15演示了发送组合键Ctrl+V的方法,0x11表示Ctrl键,0x56表示V键,KEYEVENTF_KEYUP是一个常量,它的值是0x0002,行4表示按下V键,行5-6表示松开V键。
代码片段16-15

public static void CtrlV ()
{
keybd_event(0x11, , , );
keybd_event(0x56, , , );
keybd_event(0x56, , KEYEVENTF_KEYUP, );
keybd_event(0x11, , KEYEVENTF_KEYUP, );
}

(5)    片段16-16演示了模拟回车键方法,行3表示按下回车键,行4表示中断50毫秒,行5表示释放回车键,行3-5的作用在于模拟“人工”按下回车键,按下和释放必须有一段时间,否则按键太快会被系统忽略。
代码片段16-16

public static void Enter()
{
keybd_event(0xD, , , );
Thread.Sleep();
keybd_event(0xD, , KEYEVENTF_KEYUP, );
}

示例下载:http://download.csdn.net/detail/daiqianjie/9472860

C#拓展练习之模拟键盘录入的更多相关文章

  1. WPF 模拟UI 键盘录入

    原文:WPF 模拟UI 键盘录入 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yangyisen0713/article/details/1835 ...

  2. 键盘录入6个int类型的数据存入数组arr中,将arr数组中的内容反转...

    一.有一道很有意思的数组操作相关编程题,闲来无事用JS解决了一下,问题描述如下: (1) 键盘录入6个int类型的数据存入数组arr中: (2) 将arr数组中的内容反转: (3) 将反转后的数组角标 ...

  3. 使用C#模拟键盘输入、鼠标移动和点击、设置光标位置及控制应用程序的显示

    1.模拟键盘输入(SendKeys) 功能:将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样. 语法:SendKeys.Send(string keys);SendKeys.SendWa ...

  4. SendInput模拟键盘输入的问题

    SendInput模拟键盘输入的问题  http://www.cnblogs.com/yedaoq/archive/2010/12/30/1922305.html 最近接触到这个函数,因此了解了一下, ...

  5. VB模拟键盘输入的N种方法

    VB模拟键盘输入的N种方法http://bbs.csdn.net/topics/90509805hd378发表于: 2006-12-24 14:35:39用VB模拟键盘事件的N种方法 键盘是我们使用计 ...

  6. C#模拟键盘事件

    public partial class Form1 : Form { public Form1() { InitializeComponent(); } [DllImport("USER3 ...

  7. C# 模拟键盘操作--SendKey(),SendKeys()

    模拟键盘输入就是使用以下2个语法实现的.SendKeys.Send(string keys);  //模拟汉字(文本)输入SendKeys.SendWait(string keys); //模拟按键输 ...

  8. Scanner键盘录入(欢迎交流)

    一:练习 判断一个字符串是否是对称字符串,例如"abc"不是对称字符串,"aba"."abba"."aaa"." ...

  9. IO流的练习4 —— 键盘录入学生成绩信息,进行排序后存入文本中

    需求: 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低存入文本文件 分析: A:创建学生类 B:创建集合对象 TreeSet<Student> C:键盘录入学 ...

随机推荐

  1. mysql服务的启动和停止 net stop mysql net start mysql

    第一招.mysql服务的启动和停止 net stop mysql net start mysql 第二招.登陆mysql 语法如下: mysql -u用户名-p用户密码 键入命令mysql -uroo ...

  2. android获取mac地址方法

    http://www.cnblogs.com/xioapingguo/p/4037513.html 网上找的,记录一下 public static String getMacAdress(){ Wif ...

  3. 【转】移动前端手机输入法自带emoji表情字符处理

    http://blog.csdn.net/binjly/article/details/47321043 今天,测试给我提了一个BUG,说移动端输入emoji表情无法提交.很早以前就有思考过,手机输入 ...

  4. Windows Server 2012配置开机启动项

    1.运行 shell:startup 命令,如下:

  5. 【转】数据库中的join

    转自:http://coolshell.cn/articles/3463.html 对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有 ...

  6. ExtJs自学教程(1):一切从API開始

    题 记 该系列文章不側重全方位的去介绍ExtJs的使用,仅仅是側重于解决ExtJs问题的思考方法.写的人不用长篇大论,学的人则可以自立更生.l  学习的人仅仅要有一些CSS的javascript的基础 ...

  7. 并查集类的c++封装,比較union_find algorithm四种实现方法之间的性能区别

    问题描写叙述: 在计算机科学中,并查集是一种树型的数据结构,其保持着用于处理一些不相交集合(Disjoint Sets)的合并及查询问题.有一个联合-查找算法(union-find algorithm ...

  8. Nginx + Tomcat + Session

    分别下载 tomcat http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.22/bin/apache-tomcat-7.0.22.tar.gz n ...

  9. petshop4.0 具体解释之中的一个(系统架构设计)

    前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力.业界有很多.Net与J2EE之争,很多数据是从微软的PetShop和Sun的PetStore而来.这样的争论不可避免带有浓厚的 ...

  10. const形参和实参

    当形参是const时,必须要注意关于顶层const的讨论.如前所述,顶层const的作用于对象本身: const int ci=42;  //不能改变ci,const是顶层的 int i=ci:   ...