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"
如果您确实想发送到控制台,还有其他选择:
- ConsoleSend() https://autohotkey.com/board/topic/25446-consolesend/
- Windows 10:您可以尝试粘贴文本,然后发送回车。 旧 版本的 Windows - 需要额外的软件:我发现 Clink 是可靠的,因为你可以
Send ^v
安装后 https://mridgers.github.io/clink/
我写了一个脚本,可以将一些击键发送到我的命令行。但是,这些值完全搞砸了。可能是什么原因?
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"
如果您确实想发送到控制台,还有其他选择:
- ConsoleSend() https://autohotkey.com/board/topic/25446-consolesend/
- Windows 10:您可以尝试粘贴文本,然后发送回车。 旧 版本的 Windows - 需要额外的软件:我发现 Clink 是可靠的,因为你可以
Send ^v
安装后 https://mridgers.github.io/clink/