Loops 自动热键';s循环(读取文件内容)问题与+&引用;符号
关于,每次我使用这样的代码运行脚本时,都会发生一件非常奇怪的事情:Loops 自动热键';s循环(读取文件内容)问题与+&引用;符号,loops,file-io,autohotkey,Loops,File Io,Autohotkey,关于,每次我使用这样的代码运行脚本时,都会发生一件非常奇怪的事情: ^+k:: { Gosub, MySub } Return MySub: { Send, +{Enter} Loop, read, C:\MyFile.txt { temp = %A_LoopReadLine% Send, %temp% Send, +{Enter} } } Return MyFile.txt是一个简单的文本文件,其
^+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行):
原因可能是什么?找到了答案:由于从我的文件中读取的
+
符号会像按Shift键一样发送,因此按该键可以修改输出,而不是发送文件中的原始符号
为了在不触发特殊热键的情况下发送文件的原始内容,我必须使用SendRaw
而不是send
,如本例所示:
^+k::
{
Gosub, MySub
}
Return
MySub:
{
Send, +{Enter}
Loop, read, C:\MyFile.txt
{
temp = %A_LoopReadLine%
SendRaw, %temp%
Send, +{Enter}
}
}
Return
下面是一个更新版本,它使用CTRL-V而不是Send来“重新键入”数据行:
^+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
请发布您的文件内容。已发布(请参见上面的编辑)。很高兴看到您自己找到了sendraw命令,并且您已经报告了。同意。接受答案会更好:)哇,我很高兴你没有读到一行有\r格式c:
:)@NelsonChan,你真的在告诉我AutoHotkey会用这样一行删除我的硬盘吗?!哇…好吧,这不是擦除计算机的完整命令,但是由于Send命令复制击键,如果你不小心参数是什么,它可能会做非常糟糕的事情。你不需要那样使用“发送”。您可以使用剪贴板并粘贴它的块。我将发布一个答案作为推荐的替代方案。
^+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