今日份灵感开发

前段时间领导安排了个小任务,就是用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消息存入队列后,立即处理掉,测试了一下发现还是会出现问题。思考了一下,猜测是由于执行太快引起的,有可能是处理不过来那么多消息吧?然后加了休眠,最终效果还算理想吧。

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

posted @ 2020-12-10 19:51  无心大魔王  阅读(76)  评论(0编辑  收藏  举报