Replace 使用自动热键替换剪贴板中的变音重音

Replace 使用自动热键替换剪贴板中的变音重音,replace,autohotkey,clipboard,diacritics,Replace,Autohotkey,Clipboard,Diacritics,我正在尝试用Autohotkey编写一个脚本,该脚本将获取当前突出显示的单词,将其复制到剪贴板,然后用非重音版本替换重音字符。例如,如果单词honorábilem在剪贴板中,我想将其更改为honorabilem 这就是我尝试过的: F1:: SetTitleMatchMode RegEx clipboard = Send, ^c wordToParse := %clipboard% wordToParse = RegExReplace(wordToParse,"á",&qu

我正在尝试用Autohotkey编写一个脚本,该脚本将获取当前突出显示的单词,将其复制到剪贴板,然后用非重音版本替换重音字符。例如,如果单词honorábilem在剪贴板中,我想将其更改为honorabilem

这就是我尝试过的:

F1::
SetTitleMatchMode RegEx
clipboard =
Send, ^c 
wordToParse := %clipboard%
wordToParse = RegExReplace(wordToParse,"á","a") ; also tried this: StringReplace, clipboard, clipboard, á, a, All
MsgBox, % clipboard

但是剪贴板的内容不会改变。a永远不会被a取代。感谢您的帮助。

剪贴板的内容不会更改(在发送CTRL+C更改后),因为在此之后您根本不会更改剪贴板的内容

另一个错误是给变量赋值错误。
我想你不知道和之间的区别。
不同之处在于,使用
=
分配值是不推荐的传统AHK,永远不应该使用。您正在将文字文本指定给变量。与指定某个表达式的求值结果相反,
:=
就是这样做的。
这一行
wordToParse=RegExReplace(wordToParse,“á”,“a”)
将文字文本分配给该变量,而不是调用
RegExReplace()
函数并将其结果分配给该变量

另外,如果您不使用正则表达式,则没有理由替换正则表达式。
功能就是你想要的

还有在表达式中使用传统语法:
wordToParse:=%clipboard%

通过将变量包装成
%
来引用变量,这是传统语法中的做法。
但是由于您没有这样做,所以您使用了
:=
,正如您应该做的那样,只需丢弃
%
s

修订稿:

F1::
    ;This does nothing for us, removed
    ;SetTitleMatchMode RegEx
    
    ;Empty clipboard
    Clipboard := ""
    
    ;Switched to SendInput, it's documented as faster and more reliable
    SendInput, ^c 
    
    ;Wait for the clipboard to contain something
    ClipWait
    
    wordToParse := Clipboard
    wordToParse := StrReplace(wordToParse, "á", "a")
    
    ;Since you want to display the contents of the clipboard in
    ;a message box, first we need to set what we want into it
    Clipboard := wordToParse
    MsgBox, % Clipboard
return

剪贴板的内容不会更改(在发送CTRL+C更改后),因为在此之后您根本不会更改剪贴板的内容

另一个错误是给变量赋值错误。
我想你不知道和之间的区别。
不同之处在于,使用
=
分配值是不推荐的传统AHK,永远不应该使用。您正在将文字文本指定给变量。与指定某个表达式的求值结果相反,
:=
就是这样做的。
这一行
wordToParse=RegExReplace(wordToParse,“á”,“a”)
将文字文本分配给该变量,而不是调用
RegExReplace()
函数并将其结果分配给该变量

另外,如果您不使用正则表达式,则没有理由替换正则表达式。
功能就是你想要的

还有在表达式中使用传统语法:
wordToParse:=%clipboard%

通过将变量包装成
%
来引用变量,这是传统语法中的做法。
但是由于您没有这样做,所以您使用了
:=
,正如您应该做的那样,只需丢弃
%
s

修订稿:

F1::
    ;This does nothing for us, removed
    ;SetTitleMatchMode RegEx
    
    ;Empty clipboard
    Clipboard := ""
    
    ;Switched to SendInput, it's documented as faster and more reliable
    SendInput, ^c 
    
    ;Wait for the clipboard to contain something
    ClipWait
    
    wordToParse := Clipboard
    wordToParse := StrReplace(wordToParse, "á", "a")
    
    ;Since you want to display the contents of the clipboard in
    ;a message box, first we need to set what we want into it
    Clipboard := wordToParse
    MsgBox, % Clipboard
return

感谢您的回复以及对变量分配和遗留AHK的解释。知道很有帮助。但是当在我的电脑上运行这个脚本时,结果仍然包含á而不是a。@Ryan它似乎对我有效,没有任何修改。我在“honorábilem”上面突出显示了您的单词,运行了这个脚本,并在消息框和剪贴板中获得了“honorabilem”。(我用它来评论)好的,谢谢你的回复。我接受你的回答。我这边肯定还有其他问题。它肯定会起作用的。我不明白它怎么会真的不起作用。你知道怎么回事了吗?啊!我想这是因为我没有将.ahk文件保存为带有BOM格式的UTF-8格式。它只有UTF-8版本。现在它起作用了。Dang编码。感谢您的回复以及对变量赋值和遗留AHK的解释。知道很有帮助。但是当在我的电脑上运行这个脚本时,结果仍然包含á而不是a。@Ryan它似乎对我有效,没有任何修改。我在“honorábilem”上面突出显示了您的单词,运行了这个脚本,并在消息框和剪贴板中获得了“honorabilem”。(我用它来评论)好的,谢谢你的回复。我接受你的回答。我这边肯定还有其他问题。它肯定会起作用的。我不明白它怎么会真的不起作用。你知道怎么回事了吗?啊!我想这是因为我没有将.ahk文件保存为带有BOM格式的UTF-8格式。它只有UTF-8版本。现在它起作用了。当编码。