none
关于“Alt+机内码“输入文字时的性能问题 RRS feed

  • 问题

  • 背景:我们项目中开发一个USB设备通过发送“alt+数字”的方式向windows应用程序录入文字。

    现象:测试发现当不限制发送速度,且不间断发送key的时候,在部分PC上录入的文字会出错;而当限制发送速度,每隔5ms发送一次key的时候,大部分PC机上录入正常,但仍有一些机器仍然会出现文字错误。

    问题:想搞清楚是什么影响,造成这样的差异?因为理论上PC的计算力是足够的。目前判断跟PC机器有关,而跟具体的应用无关,且初步判断跟操作系统的版本没有非常明显的关系。

    2019年9月16日 10:28

全部回复

  • 钟先生,你好。

    您是否可以提供更为详细的信息,比如当用键盘直接输入时是否会出现相同的问题,以及您的应用使用场景?

    同时,我们希望您可以提供一个示例,以供我们复现您遇到的问题。

    祝好。


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年9月17日 2:15
  • 首先我的USB设备中将文字转成机内码,例如UNICODE的编码:"主"为”alt+20027“,“诉"为”alt+35785“,然后通过USB keyboard协议,从USB设备中发送相应的数据到PC端,例如”主“是发送:

    04 00 5a 00  00 00 00 00

    04 00 00 00  00 00 00 00

    04 00 62 00  00 00 00 00

    04 00 00 00  00 00 00 00

    04 00 62 00  00 00 00 00

    04 00 00 00  00 00 00 00

    04 00 5a 00  00 00 00 00

    04 00 00 00  00 00 00 00

    04 00 5f 00  00 00 00 00

    04 00 00 00  00 00 00 00

    00 00 00 00  00 00 00 00

    则PC上输入光标所在的位置会出现”主“字。

    当我单输入一个字或者连续输入较短的文字时通常都是正常的,但是连续输入多个文字时,会有概率出现”错乱“,例如发送的是”一二三四五六七八九十“,但是屏幕会出现”一二三四~~八九~“(~表示乱码)或者”一二三八九十八九十“(会重复出现最末尾的文字)。

    这个问题只在部分PC上会出现(不止一台,概率大概10%),并且如果我在USB设备中,每发送一次按键设置一次间隔,则问题PC上错乱会减轻甚至不发生:例如发送”04 00 5a 00  00 00 00 00“数据后,通过Sleep()做5毫秒延迟,然后再发送下一个数据”04 00 00 00  00 00 00 00“。另外,由于人的文字输入是通过输入法,并且人有”思考时间“,因此在问题PC上直接用键盘输入时并不会出现相同的问题。

    测试使用的完整文字如下,错乱的文本我另行提供。然后抓包获取的USB keyboard协议数据太大,需要时我再想办法提供:

    主诉:阵发性心悸2年余,再发加重1天回车现病史:患者于2016年开始反复活动或饮酒后出现心悸症状,伴头晕、冒汗、发麻、胸闷。持续约2秒,服用“可达龙”后缓解。因症状反复,患者曾就诊于当地医院,诊断为“心悸查因”,予对症处理后症状明显好转。回车体格检查:体温36℃,脉搏78次/分,呼吸20次/分,血压174/93 mmHg,体重100kg。回车皮肤色泽正常,无黄染,无皮疹,未见皮下出血点。皮肤弹性正常,未见明显水肿,无肝掌,无蜘蛛痣,无皮下结节,皮肤无脱屑,无瘢痕。回车查血常规:白细胞计数15.34×10^9/L,中性粒细胞 95.1%,血红蛋白85g/L;降钙素原0.81ng/mL;血气分析:二氧化碳分压65.1 mmHg,氧分压69 mmHg;血氧饱和度95%。

    2019年9月17日 8:09
  • 您好,

    很抱歉,仅有这些信息并不足以帮助我们判断问题出现在哪,因为并不确定这是设备问题还是其它问题。

    您是否是在使用UWP进行开发,如果不是,或者您怀疑是设备问题,可以在更细分的论坛内提问。

    祝好。


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年9月17日 8:40
  • 你好,没有用UWP进行开发。

    目前我怀疑是操作系统中对usb keyboard消息的处理相关的程序的问题,从现象猜测操作系统在接受到按键消息后,会通知上层应用信息到达,并会缓存按键消息(长度有限),供上层应用获取,那么这个过程中是异步处理,也许由于某种原因,这个按键消息的处理太慢,导致存放按键的缓冲区溢出。

    因此我想了解这方面的相关信息,比如是否是轮询的方式在访问按键消息缓冲区,或者是否有相关的程序会对按键消息的处理有影响。

    2019年9月17日 9:16
  • 与单任务单进程的Dos相比,多任务多线程的Windows系统,

    键盘缓存如何锁定,是否存在缓存信息泄露等问题,可能也有点关系。

    2019年9月18日 1:25
  • 你好,

    《Windows 10 通用应用开发及Web App技术讨论区》主要针对UWP相关技术进行讨论。

    如果您采用WPF或者其它开发技术,可以在相对应的社区内提问。

    这有助于我们对问题进行分工处理,也会有更为专业的人士来跟踪您的问题。

    祝好


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年9月18日 2:29