1

Тема: AHK: Обратный слэш вводит разные слэши в разных раскладках.

С наступающим вас!

Есть цель, чтобы в русской раскладке клавиша "обратный слэш" вводила обычный слэш, и с шифтом вводила обратный, а в английской раскладке ничего бы не менялось. Как такое сделать?

Пока-что есть такая наработка:

;0x4090409 - ENG
;0x4190419 - RUS
\::
  SetFormat, Integer, H
  WinGet, WinID,, A
  ThreadID:=DllCall("GetWindowThreadProcessId", "UInt", WinID, "UInt", 0)
  InputLocaleID:=DllCall("GetKeyboardLayout", "UInt", ThreadID, "UInt")
  ;MsgBox, %InputLocaleID%

  If InputLocaleID = 0x4090409
    ;MsgBox, ENG
    Send, \
  If InputLocaleID = 0x4190419
    ;MsgBox, RUS
    Send, /
Return

но в ней обратный слэш в английской раскладке не срабатывает. Видимо, скрипт пытается запустить себя сам вместо того чтобы ввести символ.

2

Re: AHK: Обратный слэш вводит разные слэши в разных раскладках.

Попробуйте так:

#If GetLocale() = "ru"
 \:: Send {Text}/
+\:: Send {Text}\
#If

GetLocale() {
   ThreadID := DllCall("GetWindowThreadProcessId", "Ptr", WinExist("A"), "Ptr", 0)
   Return {0x409: "en", 0x419: "ru"}[DllCall("GetKeyboardLayout", "UInt", ThreadID) & 0xFFFF]
}
Lortrum пишет:

скрипт пытается запустить себя сам вместо того чтобы ввести символ.

Для предотвращения такого поведения читайте #UseHook.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Обратный слэш вводит разные слэши в разных раскладках.

Спасибо большое, скрипт идеально работает.