已解决:Send数字时莫名其妙丢失
本帖最后由 只为关注 于 2010-12-23 11:27 编辑写了一个函数,接收参数是数字字符串。然后用Send命令将这些数字打入其他程序的输入框,输入框位置用MouseMove定位。
实际测试中发现一些莫名其妙的问题,就是Send数字的时候会发送不全,比如Send("256"),然后回车,可是Send只发送个56,2就丢失了,然后就按了回车。百思不得其解。不知道各位有没有遇到过同样的问题。
测试电脑键盘是USB键盘,和这个有关系吗? 奇怪的是总是丢失第一个数字比如 123 ,可能send到记事本里就成了23。
即使在记事本里也会出现这个问题。 检查一下是不是你的电脑问题哈好 搞不懂啊,我想换块键盘出去试试。
AutoIt Send和硬件有关吗? 我估计是不是楼主焦点还没定在输入框就开始写了呢,加个延时看看,
或者试试用这种方法填,ControlSetText("标题","文本", "输入框控件", "字符串"),效果应该好一些 回楼上的。现在我打开一个空白的记事本,然后在记事本上操作,有时候就会出现丢失第一个数字的情况,莫名其妙啊。刚才已经卸载了搜狗输入法,可惜还是有问题 sleep(1000) 再发送看看 只是有时候丢失第一个数字? 是的,比如147,结果输出47。 昨天在那个软件里总出错,后来我打开一个大大空白的记事本,然后把输出都打到记事本里,结果发现在记事本里也会出现这种错误 现在Sleep时间调长到500了,暂时还没有出现这个问题。
可是我同样在其他电脑上Send字符串,字符串长度有78 个,从来没有出现过丢失字符串的问题啊,而且sleep时间也很短。这次send最多4个数字竟然会丢失,好奇怪的问题 楼主试试这个代码验证一下,我在自己电脑上输入好久都不出错,而且记事本窗口没有激活也可以后台输入
Run("Notepad.exe")
HotKeySet("{Esc}", "quit")
While 1
$Num = Random(11111, 99999, 1)
ToolTip("开始写入:" & $Num & " 按ESC键退出")
Sleep(500)
ControlSetText("","", "Edit1", $Num)
If ControlGetText("","", "Edit1") <> $Num Then
MsgBox(0,"","输入错误" & @CRLF & "计划输入:" & $Num & @CRLF & "实际输入:" & ControlGetText("","", "Edit1"))
Exit
EndIf
WEnd
Func quit()
Exit
EndFunc 多谢楼上,我虽然把等待时间调长了,可是下午还是有一个数据出问题了。关键是这个问题太像bug了。
逻辑上我实在想不通我哪里出错了。现在我是send 之前 之后都加了Sleep ,可是还有有出错的时候。 还有个情况,就是我前天是在运行目标程序的过程中发现这个问题的。我的AutoIt脚本就是辅助输入程序,对方程序是一个winform程序,是用.Net写的,我为了简单没有用控件方式。反正操作很机械化,所以我就用鼠标MouseMove到指定输入框,然后单击left,然后Send 数字,可是就是这个Send数字的过程中丢失字符。我为了排除winform的影响,特地弄到记事本里测试,前天在记事本里海真没发现丢失的问题。从昨天开始到今天,我在记事本里也会发现这个问题,确实丢失数字字符的第一个。 回复 9# 只为关注
如果只是第一个数字丢失,那肯定是因为开始输入太快的原因,建议把你的完整代码发上来看看 回复 12# 只为关注
我告诉你什么原因吧,这不是什么bug,opt里面有一条命令:SendKeyDownDelay。
默认值为5,有些程序需要按键稍长一点才起作用,你把它改成10、20甚至更长试试!
页:
[1]
2