2017-05-24 31 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"