我想在Windows下用AutoIt语言处理一个带有小脚本的数字条形码。
如何使用AutoIt拦截键盘中的后9个字符?
我的条形码阅读器模拟键盘。为了区分真正的键盘输入和条形码,我编写了条形码阅读器,为每个条形码添加前缀(scrollock
)和后缀(@
)。
AutoIt识别前缀并启动函数getbarcode()
,但我没有找到从键盘输入读取的命令。相反,我找到了一个无键盘记录政策。所以我尝试了InputBox
,一个带有单个输入字段和一个OK按钮的小部件。这对我来说太慢了。键盘输入激活当前窗口,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读取该命令。
答案 0 :(得分:1)
这可以帮到你。它基本上为每个Number(和Numpad-Number)设置HotKeys并调用一个Function来保存它们以及按下它们时的时间戳。现在,您在一秒钟内输入9位数后,输出将显示已发现的条形码。否则,数字键盘就像往常一样发送到Windows。
void myMouse(int button, int state, int x, int y)
{
if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN && ((x>=30 && x<=70) && ((wh-y)>=400 && (wh-y)<=440)))
{status=1;
drawdot(x,y);}
它有一点缺点:识别条形码前的数字将被打印出来...所以应该检查到目前为止输入的所有数字并在很短的时间内压制它们。那些倾向于读者的挑战。