2014-06-13 63 views
0

參考Loop (read file contents)問題,一個很奇怪的事情發生了我每次使用代碼這樣一個運行一個腳本時間:的AutoHotkey的環路(讀取文件內容)相關的「+」符號

^+k:: 
{ 
    Gosub, MySub 
} 
Return 

MySub: 
{ 
    Send, +{Enter} 
    Loop, read, C:\MyFile.txt 
    { 
     temp = %A_LoopReadLine% 
     Send, %temp% 
     Send, +{Enter} 
    } 
} 
Return 

MyFile.txt是簡單的文本文件,其中「+」符號(+)與正常的字母和數字一起使用。儘管如此,但是,如果我在空白文本文件(記事本或Microsoft Word空白紙)上運行熱鍵,則看到的每一個+都被下劃線(_)替換,感嘆號( !)或問號(?)。我也看到一個美元符號($)替換的事件。

我試圖調試它發送文本之前在屏幕上打印一個消息框,

MsgBox, %temp% 

,它顯示的MyFile.txt原始內容完美。 因此,問題應該在Send而不是文件閱讀。

我的文件的內容是這樣的(重複約20行以上):

+--------------------------------- 
120001267381 ~ TEXT 0 10/20/18 VARIABLE word text -> numbers: 17,000 x 108.99 | 109.26 x 15,000 /// number = +5.500% some text 
+--------------------------------- 
120001267381 ~ TEXT 0 10/20/18 VARIABLE word text -> numbers: 17,000 x 108.99 | 109.26 x 15,000 /// number = +5.500% some text 
+--------------------------------- 
120001267381 ~ TEXT 0 10/20/18 VARIABLE word text -> numbers: 17,000 x 108.99 | 109.26 x 15,000 /// number = +5.500% some text 
+--------------------------------- 
120001267381 ~ TEXT 0 10/20/18 VARIABLE word text -> numbers: 17,000 x 108.99 | 109.26 x 15,000 /// number = +5.500% some text 
+--------------------------------- 

可以。這是什麼原因?

+0

請發佈您的文件的內容。 – MCL

+0

已發佈(請參閱上面的修改)。 –

回答

1

找到答案:由於從我的文件中讀取的+符號像按下Shift鍵那樣發送,所以通過按下這樣的鍵來修改輸出,而不是發送文件中存在的原始符號。

爲了送我的原始文件的內容,而不觸發特殊的熱鍵,我在這個例子中使用SendRaw代替Send,如:

^+k:: 
{ 
    Gosub, MySub 
} 
Return 

MySub: 
{ 
    Send, +{Enter} 
    Loop, read, C:\MyFile.txt 
    { 
     temp = %A_LoopReadLine% 
     SendRaw, %temp% 
     Send, +{Enter} 
    } 
} 
Return 
+1

很高興看到您自己找到了sendraw命令,並且您已報告回來。 –

+0

同意。接受答案會更好:) – MCL

+1

哇,我很高興你沒有讀過一行文字,有#rformat c:':) – Nelson

1

下面是粘貼使用CTRL-V的升級版而不是發送到「重新輸入」行數據:

^+k:: 
{ 
    Gosub, MySub 
} 
Return 

MySub: 
{ 
    Send, +{Enter} 
    Loop, read, C:\MyFile.txt 
    { 
     temp = %A_LoopReadLine% 
     Clipboard = %temp% ; Write to clipboard 
     Send, ^v+{enter}  ; Paste from clipboard 
     Sleep 10    
; Short delay so it doesn't try to paste again before the clipboard has changed 
; This check can get a lot more complex, but just increase it if 10 doesn't work 
    } 
} 
Return