zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    关于接口是值类型还是引用类型的猜测
    絮语工作四年的碎碎念
    烧钱游戏加入创业公司的一些感想
    关于C#调用非托管动态库方式的性能疑问
    couchbase作为分布式session容器时的注意事项
    poj3624
    明天的下载链接
    poj 1502
    poj1459 多源多汇最大流
    poj 3041
  • 原文地址:https://www.cnblogs.com/liuzhengdao/p/5689620.html
Copyright © 2011-2022 走看看