Umlaut скрипт работает на моем устройстве, но не на друзьях - PullRequest
0 голосов
/ 25 января 2020

У меня проблема со скриптом AutoHotkey, который я сделал для себя, чтобы набирать тексты на немецком языке на моей английской sh клавиатуре. Поскольку он отлично работает для меня, я хотел поделиться им с другом, но странно, когда я пытаюсь запустить его на друзьях P C, это приводит к странным выводам:

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

~ делает не работает вообще, и ° - единственная работающая горячая клавиша.

Вот сценарий:

#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

Если вам нужна дополнительная информация, я буду рад предоставить ее.

Ответы [ 2 ]

0 голосов
/ 26 января 2020

Даже если ваша проблема, скорее всего, связана с кодировкой символов, я решил добавить свое решение для специальных символов. Вы можете ввести два символа для создания специальных символов. Пример ` a напишет a или s s s напишет ß . Я также использую ' и " для создания таких символов, как ö или é . Так как я использую Umlaut гораздо больше, чем accent aigu, Я решил "поменять" функцию клавиши '/ ". Чтобы написать ö , я нажимаю клавишу '/ ", а затем ' o" . Если я хочу написать é , я нажимаю Shift + '/ ", затем e , чтобы получить é . Недостатком этого метода является то, что если вам нужен один ", вам нужно будет нажать '/" и Пробел .

    ;================================== 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]::Œ
0 голосов
/ 26 января 2020

Вероятно, это проблема кодирования, как отметили пользователи в комментариях, однако вы можете также столкнуться с неожиданным поведением при Send, когда обычно отправляет символы, которых нет в текущей раскладке клавиатуры.
Хороший способ обойти эту проблему и не беспокоиться о проблемах с кодировкой - это указать эти специальные символы с символьной нотацией Unicode .

Кроме того, поскольку у вас есть однострочные горячие клавиши, вы можете опустить Return s и сделать это следующим образом:

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

Чтобы получить Unicodes для символов, вы можете использовать, например, this website.
Я также использую SendInput вместо Send, так как это просто хорошая практика. Даже при том, что здесь нет никакой разницы (как описано в моей выше ссылке о символьной нотации Unicode).

Кроме того, ваш скрипт, кажется, включает в себя автоматически сгенерированный код ahk вверху, который задает SendMode, Input, что означает, что все экземпляры Send автоматически конвертируются в SendInput.
Весь автоматически сгенерированный код в верхней части может быть удален, если вы хотите хороший легкий скрипт. Ничто из того, что там делается, ничего не делает для вас.

...