C#拓展练习之模拟键盘录入

摘自《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(".", 110);
keycodedic.Add("LEFT", 0x25);
keycodedic.Add("UP", 0x26);
keycodedic.Add("RIGHT", 0x27);
keycodedic.Add("DOWN", 40);
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, 0, 1, 0);
        keybd_event(keycodedic[ch.ToString()], 0, 1, 0);
    }
    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, 0, 0, 0);
    keybd_event(0x56, 0, 0, 0);
    keybd_event(0x56, 0, KEYEVENTF_KEYUP, 0);
    keybd_event(0x11, 0, KEYEVENTF_KEYUP, 0);
}

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

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

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

时间: 2024-10-06 00:34:22

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

WPF 模拟UI 键盘录入

开发WinForm 应用程序时可以利用SendKeys 类方便的模拟键盘录入操作.那么在WPF 中如何为控件实现键盘模拟呢?本篇将使用WPF SendKeys 实现和WinForm 中相同的效果. 首先将WpfSendKeys.dll 加入到项目References 中,在XAML 中加入两个Textbox 和一个Button 如下代码. <Window x:Class="WpKeyboard.MainWindow" xmlns="http://schemas.micr

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

有一道很有意思的数组操作相关编程题,闲来无事用JS解决了一下,问题描述如下: (1) 键盘录入6个int类型的数据存入数组arr中: (2) 将arr数组中的内容反转: (3) 将反转后的数组角标为奇数的元素相互交换,即1和3交换,3和5交换,以此类推: (4) 将数组中最后一个角标为奇数的元素和数组中第一个角标为奇数的元素交换: (5)打印最终的数组,(实现了1—4步之后的数组) 示例:如用户输入的6个整数为[1,2,3,4,5,6]>[6,5,4,3,2,1]>[6,3,4,1,2,5]&

键盘录入(Java)

键盘录入(Java): 1.导包 格式 import java.util.Scanner; 位置 在class上面 2.创建键盘录入对象 格式 Scanner sc = new Scanner(System.in); 3.通过对象获取数据 格式 int x = sc.nextInt(); import java.util.Scanner; class ScannerDemo { public static void main(String[] args) { //创建键盘录入数据对象 Scann

初学Java4:从键盘录入学生信息(仅姓名和成绩)并输出

//从键盘录入学生信息(仅姓名和成绩)并输出.public class StuInformation {//此处命名用StuScore可能更恰当 String name; double score;}import java.util.Scanner; public class TextStuInformation { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int i = 0, j

C#模拟键盘事件

转自:http://www.cnblogs.com/tianguook/archive/2010/07/06/1772438.html public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        } [DllImport("USER32.DLL")]        public static extern IntPtr Fin

Android查询:模拟键盘鼠标事件之adb shell 实现

1. 发送键盘事件: 命令格式1:adb shell input keyevent "value" 其中value以及对应的key code如下表所列: KeyEvent Value      KEYCODE     Comment 0       KEYCODE_UNKNOWN 1       KEYCODE_MENU     在SDK2.1的模拟器中命令失效,sendevent命令可行 2       KEYCODE_SOFT_RIGHT 3       KEYCODE_HOME

Java基础知识强化之网络编程笔记04:UDP之发送端的数据来自于键盘录入案例

1. 数据来自于键盘录入 键盘录入数据要自己控制录入结束. 2. 代码实现: (1)发送端: 1 package com.himi.updDemo1; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 import java.net.InetAddress; 7 import java.util.Scanner; 8 9 /** 10 * 11

03_运算符、键盘录入、流程控制

1:运算符(掌握) (1)算术运算符  A:+,-,*,/,%,++,--  B:+的用法   a:加法   b:正号   c:字符串连接符  C:/和%的区别   数据做除法操作的时候,/取得是商,%取得是余数  D:++和--的用法   a:他们的作用是自增或者自减   b:使用    **单独使用     放在操作数据的前面和后面效果一样.     a++或者++a效果一样.    **参与操作使用     放在操作数的前面:先自增或者自减,再参与操作      int a = 10;  

模拟键盘输入

微软有个软键盘,可以通过命令行输入osk调出来. 有时候我们想自己模拟几个键盘按键,怎么办?其实Win32 API中有一个keybd_event可以模拟键盘按键的输入.以C#语言为例. 首先引用namesapce,并导入API. using System.Runtime.InteropServices; [DllImport("user32.dll")]private static extern void keybd_event(byte bVk, byte bScan, int dw