Войти

Показать полную графическую версию : AutoHotKey: Замена запятой на точку и ввод "і" и "ї" из русской раскладки.


stuermer01
20-10-2021, 12:29
Добрый день,

подскажите, как написать 2 скрипта для горячих клавиш в русской раскладке клавиатуры.

1. На цифровом блоке клавиатуры при нажатии клавиши "," в любой раскладке вместо "," вводилась точка "." (как в английской) ?

2. В русской раскладке клавиатуры:
При нажатии LeftAlt + "ы" вводилась "і"; при нажатии LeftAlt + shift + "ы" вводилась "І".
При нажатии LeftAlt + "ъ" вводилась "ї"; при нажатии LeftAlt + shift + "ъ" вводилась "Ї".

Fors1k
20-10-2021, 16:50
2 - почему не подходит просто сменить раскладку на украинскую?

stuermer01
20-10-2021, 17:54
почему не подходит просто сменить раскладку на украинскую? »
Тогда будет 3 раскладки, а это напрягает переключать, запутаться можно. Украинский нужен реже.

Есть такая заготовка:

#Persistent

NumpadDot:: ; ввод точки вместо запятой на нампаде
Send, .
return

RU() ; Проверка языка ввода.
{
WinID := WinExist("A")
ThreadID := DllCall("GetWindowThreadProcessId", "UInt", WinID, "UInt", 0)
InputLocaleID := DllCall("GetKeyboardLayout", "UInt", ThreadID, "UInt")
If InputLocaleID = 0x4190419
Return True
Else
Return False
}


<!sc1F::
if RU() = 1
Send, i ; если русский язык, то ввод i
if RU() = 0
Send, s ;если другой язык, то ввод s
return

<!+sc1F::
if RU() = 1
Send, I ;если русский язык, то ввод I
if RU() = 0
Send, S ;если другой язык, то ввод S
return

<!sc1B::
if RU() = 1
Send, ї ; если русский язык, то ввод i

return
<!+sc1B::
if RU() = 1
Send, Ї ;если русский язык, то ввод I

return

Но тут непонятно, почему для i есть латинский кейс, а для ї - нет?
Еще непонятно, почему цикла нет. Он же закончится после одного нажатия.

Fors1k
20-10-2021, 22:07
Для возможности автоматизации нажатий клавиш и кликов,
установите модуль psClick (https://psclick.ru/GettingStarted) в PowerShell.

Теперь можем отслеживать и подменять нажатые клавиши:cls
while($true){
Sleep -m 2
if((Get-KeyboardLayout).Culture -ne "ru-RU"){continue}
if(Get-KeyState Decimal){
Send-Key Back
Sleep -m 16
Send-Text "." -Handle (Get-FocusWindow)
Sleep -m 16
}
if(Get-KeyState S){
Send-Key Back
Sleep -m 16
if((Get-KeyState LShiftKey) -eq 2)
{Send-Text "І" -Handle (Get-FocusWindow)}
else
{Send-Text "і" -Handle (Get-FocusWindow)}
Sleep -m 16
}
if(Get-KeyState Oem6){
Send-Key Back
Sleep -m 16
if((Get-KeyState LShiftKey) -eq 2)
{Send-Text "Ї" -Handle (Get-FocusWindow)}
else
{Send-Text "ї" -Handle (Get-FocusWindow)}
Sleep -m 16
}
}

Погонял несколько раз - работает нормально. Если прям зажать клавишу, то может иногда проскакивать русская буква.
Это тоже можно решить, но надо будет делать перехват самих нажатий, что приведёт к увеличению объема кода.
Для набора текста этого варианта должно быть вполне достаточно. Кстати, идея насчет замены , на . очень неплохая.

megaloman
20-10-2021, 23:53
Создатель раскладки клавиатуры Microsoft (MSKLC) Версия 1.4 (https://www.microsoft.com/en-us/download/details.aspx?id=102134)

Удобная раскладка клавиатуры. Как самому создать удобную раскладку? (http://rones.su/techno/your-own-keyboard-layout.html)

stuermer01
21-10-2021, 16:35
Кстати, идея насчет замены , на . очень неплохая. »

пользуйтесь на здоровье

Удобная раскладка клавиатуры. Как самому создать удобную раскладку? »

Может кто-то сделал уже и может выложить рус-укр раскладку, чтоб велосипед не изобретать? Там ещё есть символы ', Ґґ, ₴ - вроде всё. По той же схеме - LAlt, LALt+Shift.

Microsoft Keyboard Layout Creator (https://www.microsoft.com/en-us/download/details.aspx?id=102134)

Iska
23-10-2021, 12:47
Еще непонятно, почему цикла нет. Он же закончится после одного нажатия. »
AHK работает не так. Сходите на Community (https://www.autohotkey.com/boards/) (если нормально с английским) или Серый форум (http://forum.script-coding.com/) (на русском), там разъяснят и подкажут.




© OSzone.net 2001-2012