2017-05-24 28 views
0

我写了一个脚本,发送一些按键到我的命令行。然而,价值观已经完全搞砸了。原因是什么?ControleSend发送奇怪的输出Autohotkey

BlockInput, on 
WinGetActiveTitle, Title 
DetectHiddenWindows, on 
ControlClick, x660 y391, Notepad 
ControlSend, , {Backspace}{Backspace}{Backspace}{Backspace}{Backspace}{Backspace}, Notepad 
Sleep 30 
ControlSend, , 2, Notepad 
Sleep 30 
ControlSend, , echo stat_id: 78 : SETTING PRICE TO 2 toactivate: %Title% >> logs.txt{Enter} , ahk_exe cmd.exe 
ControlClick, x668 y640, Notepad 
ControlSend, , echo ACTION NEXT (after SETTING PRICE) >> logs.txt{Enter} , ahk_exe cmd.exe 
WinActivate, %Title% 
Send {Ctrl down}+{Ctrl up} 
Send {Ctrl down}+{Ctrl up} 
Send {Ctrl down}+{Ctrl up} 
Send {Ctrl down}+{Ctrl up} 
Send {Ctrl down}+{Ctrl up} 
BlockInput, off 
ExitApp 
Return 

这是输出的一个例子:

at-idec; ho78 B: EFSOETRTEI SNGCR PERENIC ESH TOOOT 2 DOTNOEAC >T>I valotges;. tixqt 

echo ACTION NEXT (after SETTING PREICCEHO) >A>CT lioogn s.ntexxtt 
+0

当时我能够解决您的问题后,是可靠的? – GroggyOtter

回答

3

不少东西提

1)你不应该使用controlsend发送文本到命令提示符。相反,你应该使用Run, % Compsec。 ComSpec只是cmd.exe的快捷方式。所以当你做Run, % Compsec时,你只是传递了cmd提示符旁边的任何内容。例如运行IPCONFIG:Run, % ComSpec " /k ipconfig"

轻易记住它切换使用,请记住,/k将“保持命令提示符打开的时候,它的完成”和/c将“关闭后的命令已经运行”。

此外,请确保您了解Expression与非表达式之间的区别。 下面的代码行看起来不同,但每一行做同样的事情:不是写{Backspace}{Backspace}{Backspace}{Backspace}{Backspace}{Backspace}

Run, % ComSpec " /k ipconfig" 
Run, %ComSpec% /k ipconfig 

2),相反,包括有多少次你想要的键名之后,但在该repated关键关闭大括号。 {Backspace 6}。这适用于任何键。

3)BlockInput可能是一个危险的命令,通常我建议其他人尽可能避免它。通过使用Run ComSpec而不是Control send,可以删除任何需要使用BlockInput的情况。

4)您最初遇到的问题很可能与文本发送太快有关。用SetKeyDelay降低发送速度。


尝试更换此:

ControlSend, , echo stat_id: 78 : SETTING PRICE TO 2 toactivate: %Title% >> logs.txt{Enter} , ahk_exe cmd.exe 

有了这个:

Run, % ComSpec " /k echo stat_id: 78 : SETTING PRICE TO 2 toactivate: " Title " >> logs.txt"