1

我需要发送一长串输入名称来打开程序的对话框。我试过 send() 函数,但它不能完全做到这一点。我认为由于操作系统上下文切换 send() 函数将字符串的某些部分发送到另一个程序。

以下代码是我脚本的一部分:

$ftmp = ""
while 1
  $fname = FileReadLine($file)
  if @error = -1 then ExitLoop
  $ftmp = $ftmp & $fname & " "
WEnd  
send("^o")
WinActivate("Open Image")
sleep(100)
send($fadrs)
Sleep(200)
send("{ENTER}")
sleep(10)
send($ftmp)
Sleep(100)
send("{ENTER}")
4

4 回答 4

1

这是我从Autoitscript得到的答案,它有效。
我们应该在发送长字符串时使用controlsettext() 。

于 2012-08-06T09:16:46.460 回答
1

ControlSend() 应该是您在 Send() 的位置使用的。另外,我注意到您发送了一些 {ENTER} 击键。使用 ControlClick() 或 ControlCommand() 按下应该将您移动到下一个屏幕的按钮(这更稳定)。

Send() 类型到当前聚焦的控件。SendKeepActive() 可以帮助解决这个问题,但是它只会使当前窗口保持活动状态,而不必让您在相关控件上保持活动状态。

使用 AutoIt Window Info 工具获取 ControlSend()/ControlClick() 函数输入的每个控件的类。

于 2012-08-28T18:32:41.477 回答
0

对不起,没看到下面已经成功回答了。我会留下这个,以防万一它帮助别人。

也许由于您只是将部分 Send() 参数放入窗口,因此您的窗口正在停用。我会尝试在每个 Send() 之前使用 WinActivate(),并且我会在 500 甚至 1000 之间放置更长的睡眠时间。我认为如果我正确理解了这个问题,那就可以了。

对不起,没看到下面已经成功回答了。我会留下这个,以防万一它帮助别人。

于 2012-08-17T15:23:54.300 回答
0

我知道还有其他几个答案,但我认为我的答案可能会更好一点?开始:

;send a large string of text instantaneously using the clipboard
ClipPut($myString)
;then you could just send ctrl + v
;Send("^v")
;or to be more precise use controlsend()
ControlSend(WindowTitle, WindowText, controlID, "^v" [, flag] )
;this way it sends instantly

希望这可以帮助!

于 2012-08-22T02:09:33.910 回答