【发布时间】:2016-01-18 13:30:24
【问题描述】:
我想在 Windows 下使用 AutoIt 语言的小脚本处理数字条形码。
如何使用 AutoIt 从键盘截取接下来的 9 个字符?
我的条形码阅读器模拟键盘。为了区分真正的键盘输入和条形码,我对条形码阅读器进行了编程,为每个条形码添加前缀 (scrollock) 和后缀 (@)。
AutoIt 识别前缀并启动函数getbarcode(),但我没有找到从键盘输入读取的命令。相反,我发现了一个无键盘记录策略。所以我尝试了InputBox,这是一个带有单个输入字段和一个确定按钮的小部件。这对我来说太慢了。键盘输入激活当前窗口,InputBox 被推入后台。
#include <Misc.au3>
#include <MsgBoxConstants.au3>
Global $HotKeyActive = True
HotKeySet("{ScrollLock}", "getbarcode")
While 1
Sleep(1000)
WEnd
Func getbarcode()
If $HotKeyActive = True Then
$HotKeyActive = False
$InputString = InputBox("Artikelnummer", "Artikelnummer")
MsgBox($MB_SYSTEMMODAL, "Debug", $InputString, 10)
$HotKeyActive = True
EndIf
EndFunc
我通过使用HotKeySet 定义了更多在按下键 0 到 9 时执行的 10 个函数,再次尝试了它。每个函数都将其编号附加到全局字符串中。全局字符串由前缀函数重置并由后缀函数使用。它可以工作,但是字符的顺序是错误的。似乎有时间问题。
在第三次尝试中,我让条形码阅读器模拟串行设备并尝试从 AutoIt 读取 com 端口。
【问题讨论】:
-
您是否尝试过为所有号码设置全局热键,始终保存最后 9 个号码并仅在它们出现时处理它们,否则使用
Send(...)将它们转发到 Windows? -
@Samoth,我为所有数字设置了全局热键,将数字附加到全局字符串中。数字顺序被打乱了;由于时间问题,我猜。我可以通过特殊字符(scrollock)识别条形码的开头。条形码的结尾可以通过另一个字符(在我的例子中为“@”)或字符数或超时来识别。
标签: keyboard barcode-scanner autoit keylogger