1

Тема: AHK: Назначить действие на Ctrl+Shift+CapsLock+буква

Долго пытался, да так и не смог написать скрипт под свою задачу. Нужно чтобы Caps Lock в сочетании с WASD работал как стрелки, и чтобы к этому сочетанию можно было добавить модификаторы Ctrl и Shift, и работало это сочетание 4 клавиш так же как ctrl+shift+стрелки. На обычное нажатие Caps Lock повешу что-нибудь ещё, пока не придумал что именно. Но и здесь я получил мини-баг - когда нажимаю Caps Lock и выполняю макрос, на клавиатуре на мгновение мигает светодиод. Подскажите пожалуйста, что нужно написать.

2

Re: AHK: Назначить действие на Ctrl+Shift+CapsLock+буква

Ваши наработки?

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

3

Re: AHK: Назначить действие на Ctrl+Shift+CapsLock+буква

CapsLock & A::
If GetKeyState("Ctrl","p")
 If GetKeyState("Shift","p")
  Send ^+{left}
 Else
  Send ^{left}
Else
 Send, {left}
Return

CapsLock & S::
If GetKeyState("Ctrl","p")
 If GetKeyState("Shift","p")
  Send ^+{Down}
 Else
  Send ^{Down}
Else
 Send, {Down}
Return

CapsLock & D::
If GetKeyState("Ctrl","p")
 If GetKeyState("Shift","p")
  Send ^+{right}
 Else
  Send ^{right}
Else
 Send, {right}
Return

CapsLock & W::
If GetKeyState("Ctrl","p")
 If GetKeyState("Shift","p")
  Send ^+{up}
 Else
  Send ^{up}
Else
 Send, {up}
Return

CapsLock & Q::
If GetKeyState("Ctrl","p")
 If GetKeyState("Shift","p")
  Send ^+{home}
 Else
  Send ^{home}
Else
 Send, {home}
Return

CapsLock & E::
If GetKeyState("Ctrl","p")
 If GetKeyState("Shift","p")
  Send ^+{end}
 Else
  Send ^{end}
Else
 Send, {end}
Return

CapsLock & 2::!F4

^CapsLock::
{
    If GetKeyState("CapsLock","T")
        SetCapsLockState, Off
    Else
        SetCapsLockState, On
    Return
}

Я реализовал задуманное лишь отчасти - в комбинациях с ctrl, shift, caps lock и буквами работала лишь комбинаций (в разном написании по-разному), заставить их все работать я не смог.

4 (изменено: ypppu, 2022-12-11 14:18:49)

Re: AHK: Назначить действие на Ctrl+Shift+CapsLock+буква

Lortrum, разберитесь с таким примером. Если встретятся незнакомые команды, почитайте про них в справке. Если справка не поможет - спрашивайте.

+ открыть спойлер
*w::
GetKeyState, CapslockState, CapsLock, T
If CapslockState = D
Send {Up}
Else Send, w
Return

*a::
GetKeyState, CapslockState, CapsLock, T
If CapslockState = D
Send {Left}
Else Send, a
Return

*s::
GetKeyState, CapslockState, CapsLock, T
If CapslockState = D
Send {Down}
Else Send, s
Return

*d::
GetKeyState, CapslockState, CapsLock, T
If CapslockState = D
Send {Right}
Else Send, d
Return

Добавлено:
Упустил один нюанс. Чтобы модификаторы оставались рабочими, следует использовать контекстно-чувствительные горячие клавиши:

+ открыть спойлер
#If CapsLockState() = "D"
w::Up
a::Left
s::Down
d::Right
#If


CapsLockState()
{
GetKeyState, CapsLock_st, CapsLock, T
Return CapsLock_st
}

5

Re: AHK: Назначить действие на Ctrl+Shift+CapsLock+буква

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


CapsLock & a::
    if (GetKeyState("Ctrl", "P") && GetKeyState("Shift", "P"))
        Send ^+{Left}
    else if (GetKeyState("Ctrl", "P"))
        Send ^{Left}
    else if (GetKeyState("Shift", "P"))
        Send +{Left}
    else
        Send {Left}
Return

6

Re: AHK: Назначить действие на Ctrl+Shift+CapsLock+буква

Спасибо большое всем участникам темы. Скрипт Taveron подошёл под мою задачу больше всего.