ControleSend 发送奇怪的输出 Autohotkey

ControleSend send weird output 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

有很多事情要提

1) 您不应该使用 controlsend 将文本发送到 cmd 提示符。相反,您应该使用 Run, % Compsec。 ComSpec 只是 cmd.exe 的快捷方式。因此,当您执行 Run, % Compsec 时,您实际上只是在传递 cmd 提示符旁边的任何内容。 运行 ipconfig 示例:Run, % ComSpec " /k ipconfig"

要轻松记住要使用哪个开关,请记住 /k 将 "keep the command prompt open when it's done",/c 将 "close it after the commands have run"。

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

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

2) 不要写 {Backspace}{Backspace}{Backspace}{Backspace}{Backspace}{Backspace},而是在键名之后但在右大括号之前包含您希望键重复多少次。 {Backspace 6}。这适用于任何键。

3) BlockInput 可能是一个危险的命令,通常,我建议其他人尽可能避免使用它。通过使用 运行 ComSpec 而不是控制发送,您无需使用 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"

如果您确实想发送到控制台,还有其他选择: