• 今日份灵感开发


    前段时间领导安排了个小任务,就是用c#开发个快捷键程序,按一下快捷键将某设备的数据采集出来,打印在例如excel表等等的界面上,共有两个数据先将第一个数据打印在第一个单元格里,再将第二个数据打印在第二个单元格里。

    由于最近在搞另一个项目的联调工作,搁置了那么几天,今天拿起来又搞了搞,有一说一,c#这东西我是真的不熟,压根没正经学过,前段时间从网上找了几段代码,实现了一些快捷键触发函数、开机自启动等功能,但是,打印数据这一块一直不太理想。

    上网查了查很多资料都是一些老文章,偶然间发现了两个比较简单的办法。一个就是将数据放入剪切板,再模拟ctrl + v粘出去,另外一个是我自己研究的时候偶然发现直接SendKeys.Send也可以打印文字。

    经过实践发现效果并不好,出现了一些诡异的状况,例如只打印出了第二个字符串、科学计数法表示的数据打印出来与原始数据不一样... ...头大... ...

    忽然灵光一现,看了一下SendKeys中还有哪些方法,然后发现了Flush方法,用于处理消息队列中当前所有windows消息。

    虽然不懂原理,但是冷静分析一波,这说明存在一个队列,存放的是windows消息,那啥是windows消息呢?莫非就是用SendKeys发送的那些模拟快捷键的指令?

                Clipboard.SetDataObject("数据");
                SendKeys.Send("^v");
                SendKeys.Flush();
                Thread.Sleep(10);
                SendKeys.Send("{TAB}");
                SendKeys.Flush();
                Thread.Sleep(10);
                Clipboard.SetDataObject("另一个数据");
                SendKeys.Send("^v");
                SendKeys.Flush();        

    最终改为这个鬼样子,将一个windows消息存入队列后,立即处理掉,测试了一下发现还是会出现问题。思考了一下,猜测是由于执行太快引起的,有可能是处理不过来那么多消息吧?然后加了休眠,最终效果还算理想吧。

     感觉自己在乱搞... ...

  • 相关阅读:
    这里有20位程序员关于求职的疑惑,还好也有参考答案
    非科班小白如何逆袭,成功跨考985软件工程?!
    springmvc之RequestMapping中的请求参数和请求头
    springmvc之RequestMapping中的请求方式
    springmvc之RequestMapping注解既可以修饰类也可以修饰方法
    springmvc之第一个springmvc程序
    python之列表推导和生成器表达式
    python之容器序列和扁平序列
    python之利用魔术方法实现自己定义的二维向量
    spring之整合struts2
  • 原文地址:https://www.cnblogs.com/wxdmw/p/14117021.html
Copyright © 2020-2023  润新知