找回密码
 加入
搜索
查看: 10018|回复: 22

[AU3基础] 已解决:Send数字时莫名其妙丢失

 火.. [复制链接]
发表于 2010-12-2 12:16:40 | 显示全部楼层 |阅读模式
本帖最后由 只为关注 于 2010-12-23 11:27 编辑

写了一个函数,接收参数是数字字符串。然后用Send命令将这些数字打入其他程序的输入框,输入框位置用MouseMove定位。

实际测试中发现一些莫名其妙的问题,就是Send数字的时候会发送不全,比如Send("256"),然后回车,可是Send只发送个56,2就丢失了,然后就按了回车。百思不得其解。不知道各位有没有遇到过同样的问题。

测试电脑键盘是USB键盘,和这个有关系吗?
 楼主| 发表于 2010-12-2 13:16:48 | 显示全部楼层
奇怪的是总是丢失第一个数字  比如 123 ,可能send到记事本里就成了23。

即使在记事本里也会出现这个问题。
发表于 2010-12-2 13:19:13 | 显示全部楼层
检查一下是不是你的电脑问题哈好
 楼主| 发表于 2010-12-2 13:24:13 | 显示全部楼层
搞不懂啊,我想换块键盘出去试试。
AutoIt Send和硬件有关吗?
发表于 2010-12-2 13:43:38 | 显示全部楼层
我估计是不是楼主焦点还没定在输入框就开始写了呢,加个延时看看,
或者试试用这种方法填,ControlSetText("标题","文本", "输入框控件", "字符串"),效果应该好一些
 楼主| 发表于 2010-12-2 14:11:54 | 显示全部楼层
回楼上的。现在我打开一个空白的记事本,然后在记事本上操作,有时候就会出现丢失第一个数字的情况,莫名其妙啊。刚才已经卸载了搜狗输入法,可惜还是有问题
发表于 2010-12-2 14:15:41 | 显示全部楼层
sleep(1000) 再发送看看
发表于 2010-12-2 15:18:52 | 显示全部楼层
只是有时候丢失第一个数字?
 楼主| 发表于 2010-12-2 15:25:51 | 显示全部楼层
是的,比如147,结果输出47。 昨天在那个软件里总出错,后来我打开一个大大空白的记事本,然后把输出都打到记事本里,结果发现在记事本里也会出现这种错误
 楼主| 发表于 2010-12-2 15:36:51 | 显示全部楼层
现在Sleep时间调长到500了,暂时还没有出现这个问题。
可是我同样在其他电脑上Send字符串,字符串长度有7  8 个,从来没有出现过丢失字符串的问题啊,而且sleep时间也很短。这次send最多4个数字竟然会丢失,好奇怪的问题
发表于 2010-12-2 16:59:48 | 显示全部楼层
楼主试试这个代码验证一下,我在自己电脑上输入好久都不出错,而且记事本窗口没有激活也可以后台输入


Run("Notepad.exe")

HotKeySet("{Esc}", "quit")
While 1
        $Num = Random(11111, 99999, 1)
        ToolTip("开始写入:" & $Num & " 按ESC键退出")
        Sleep(500)
        ControlSetText("[CLASS:Notepad]","", "Edit1", $Num)
        If ControlGetText("[CLASS:Notepad]","", "Edit1") <> $Num Then
                MsgBox(0,"","输入错误" & @CRLF & "计划输入:" & $Num & @CRLF & "实际输入:" & ControlGetText("[CLASS:Notepad]","", "Edit1"))
                Exit
        EndIf
WEnd

Func quit()
        Exit
EndFunc

评分

参与人数 2金钱 +30 收起 理由
只为关注 + 10 多谢您的代码
afan + 20

查看全部评分

 楼主| 发表于 2010-12-2 17:55:04 | 显示全部楼层
多谢楼上,我虽然把等待时间调长了,可是下午还是有一个数据出问题了。关键是这个问题太像bug了。

逻辑上我实在想不通我哪里出错了。现在我是send 之前 之后都加了Sleep ,可是还有有出错的时候。
 楼主| 发表于 2010-12-2 17:59:33 | 显示全部楼层
还有个情况,就是我前天是在运行目标程序的过程中发现这个问题的。我的AutoIt脚本就是辅助输入程序,对方程序是一个winform程序,是用.Net写的,我为了简单没有用控件方式。反正操作很机械化,所以我就用鼠标MouseMove到指定输入框,然后单击left,然后Send 数字,可是就是这个Send数字的过程中丢失字符。我为了排除winform的影响,特地弄到记事本里测试,前天在记事本里海真没发现丢失的问题。从昨天开始到今天,我在记事本里也会发现这个问题,确实丢失数字字符的第一个。
发表于 2010-12-2 18:01:03 | 显示全部楼层
回复 9# 只为关注


    如果只是第一个数字丢失,那肯定是因为开始输入太快的原因,建议把你的完整代码发上来看看
发表于 2010-12-2 18:07:52 | 显示全部楼层
回复 12# 只为关注


    我告诉你什么原因吧,这不是什么bug,opt里面有一条命令:SendKeyDownDelay。
默认值为5,有些程序需要按键稍长一点才起作用,你把它改成10、20甚至更长试试!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 07:34 , Processed in 0.091928 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表