变音脚本在我的设备上有效,但在朋友上无效

Umlaut script does work on my device but not on a friends

我运行遇到了一个问题,我为自己制作了一个 AutoHotkey 脚本,用于在英文键盘上键入德语文本。 因为它对我非常有用,所以我想与朋友分享它,但奇怪的是,当我尝试在朋友的 PC 上 运行 它时,它确实会导致奇怪的输出:

Ä -> Ä  
ä -> ä  
Ö -> Ö  
ö -> ö  
Ü -> Ü  
ü -> ü  
ß -> ß

~ 根本不起作用,° 是唯一有效的热键。

这是脚本:

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.\
!+A::
Send, Ä
return
!a::
Send, ä
return
!+O::
Send, Ö
return
!o::
Send, ö
return
!+U::
Send, Ü
return
!u::
Send, ü
return
!s::
Send, ß
return
!e::
Send, €
return
!m::
Send, µ
return
!d::
Send, °
return
!]::
Send, {Alt down}{Numpad1}{Numpad2}{Numpad6}{Alt up}
return
^!#right::
Run C:\Users\cmcdi\Documents\Shortcuts\display64.exe /rotate:90
return

如果您需要更多信息,我很乐意提供。

这可能是一个编码问题,正如评论中的人所指出的那样,但是当 正常 发送不发送的字符时,Send 也可能会遇到一些意外行为存在于当前键盘布局中。
解决此问题并且不必担心任何编码问题的好方法是使用 Unicode character notation.

指定这些 special 字符

另外,因为你有单行热键,你可以省略 Returns 并像这样:

!+A::SendInput, {U+00C4}
!a::SendInput, {U+00E4}
!+O::SendInput, {U+00D6}
!o::SendInput, {U+00F6}

要获取字符的 Unicode,您可以使用例如this 网站。
我还使用 SendInput 而不是 Send,因为这样做是一种很好的做法。即使它在这里没有任何区别(如我上面 link 中关于 Unicode 字符符号的描述)。

此外,您的脚本似乎在顶部包含自动生成的 ahk 代码,该代码指定 SendMode, Input,这意味着 Send 的所有实例都会自动转换为 SendInput
如果您想要一个漂亮的轻量级脚本,可以删除顶部的所有自动生成的代码。 None 的东西可以为您做任何事情。

即使您的问题很可能是字符编码问题,我还是决定加入我的特殊字符解决方案。您可以键入两个字符来创建特殊字符。 示例 ` a 将写成 àsss 会写成 ß。我还使用 '" 来创建像 öé[ 这样的字符=36=]. 由于我使用元音变音的次数远多于重音aigu,所以我决定"swap" '/ 键的功能。所以要写 ö,我按 '/" 键,然后按 'o". If I want to write the é, I press the Shift+'/" 然后 e 得到 é。这个方法的"disadvantage"是,如果你需要单个",你需要按'/"Space.

    ;================================== SPECIAL CHARACTERS FOR US KEYBOARD ==================================
:?C*:`` :: ; Turn `{Space} into neutral `, else ` will be used in next vowel.
    Send, ``{Space}{BackSpace}
Return

:?C*:``a::à
:?C*:``i::ì
:?C*:``e::è
:?C*:``o::ò
:?C*:``u::ù
:?C*:``A::À
:?C*:``I::Ì
:?C*:``E::È
:?C*:``O::Ò
:?C*:``U::Ù

:?C*:^ :: ; Turn ^{Space} into neutral ^, else ^ will be used in next vowel.
    Send, {^}{Space}{BackSpace}
Return

:?C*:^a::â
:?C*:^i::î
:?C*:^e::ê
:?C*:^o::ô
:?C*:^u::û
:?C*:^A::Â
:?C*:^I::Î
:?C*:^E::Ê
:?C*:^O::Ô
:?C*:^U::Û

:?C*:`" :: ; Turn "{Space} into neutral ", else " will be used in next vowel.
    Send, +{'}{Space}{BackSpace}
Return

:?C*:`'a::ä
:?C*:`;a::ä
:?C*:`'i::ï
:?C*:`;i::ï
:?C*:`'e::ë
:?C*:`;e::ë
:?C*:`'o::ö
:?C*:`;o::ö
:?C*:`'u::ü
:?C*:`;u::ü
:?C*:`'A::Ä
:?C*:`'I::Ï
:?C*:`'E::Ë
:?C*:`'O::Ö
:?C*:`'U::Ü

:?C*:' :: ; Turn '{Space} into neutral ', else ' will be used in next vowel.
    Send, {'}{Space}{BackSpace}
Return

:?C*:`"a::á
:?C*:`"i::í
:?C*:`"e::é
:?C*:`"o::ó
:?C*:`"u::ú
:?C*:`"A::Á
:?C*:`"I::Í
:?C*:`"E::É
:?C*:`"O::Ó
:?C*:`"U::Ú

:?C*:`'c::ç
:?C*:`'C::Ç
:?C*:ss]::ß
:?C*:sss::ß
:?C*:ae]::æ
:?C*:AE]::Æ
:?C*:oe]::œ
:?C*:OE]::Œ