1 (изменено: size222, 2024-03-15 03:39:46)

Тема: AHK: Действия при двойном нажатии Ctrl, и не только.

Здравствуйте, являюсь владельцем Macbook за которым часто провожу время. При переходе на Windows, меня мучает переключение языка, сочетанием клавиш. Alt+Shift. (Punto Switcher не предлагать)

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

Подскажите, пожалуйста, скрипт. Чтобы при двойном нажатии на Ctrl. Левый. Нажималось сочетание клавиш Alt+Shift. (Левые)

Также в макбуке. Есть кнопка для голосового ввода текста. Возможно ли сделать, чтобы при двойном нажатии на Shift, нажималось сочетание клавиш. Win+H

Спасибо.

P.S. Я пробовал что-то подобное, но срабатывает очень быстро и опять же при зажатии кнопки он щелкает языки. Не возможно скопировать что-то и вставить.

#SingleInstance, Force
#NoEnv

LControl::
While GetKeyState("LControl", "P") && GetKeyState("LControl", "P")
{
  SendInput, {Alt down}{Shift down}{Alt up}{Shift up}
  Sleep, 100
}

Return

С Shift работает, но очень быстро. И при зажатии Shift также срабатывает комбинация. Это не позволяет поставить, например, запятую или написать с большой буквы.

#Persistent
SetTimer, CheckShiftPress, 100
Return

CheckShiftPress:
If GetKeyState("LShift", "P") { ; Проверяем, нажата ли левая Shift
    If !shiftPressed { ; Если это первое нажатие
        shiftPressed := true ; Устанавливаем флаг, что Shift был нажат
        SetTimer, ResetShiftPressed, -500 ; Устанавливаем таймер для сброса флага через 500 миллисекунд
    } else { ; Если это второе нажатие
        Send, #h ; Отправляем комбинацию клавиш Win+H для переключения языка
        shiftPressed := false ; Сбрасываем флаг, чтобы предотвратить повторное нажатие
    }
}
Return

ResetShiftPressed:
shiftPressed := false ; Сбрасываем флаг, если прошло более 500 миллисекунд с момента первого нажатия
Return

2

Re: AHK: Действия при двойном нажатии Ctrl, и не только.

Язык лучше так переключать:

~LControl Up::
    WM_INPUTLANGCHANGEREQUEST := 0x50, INPUTLANGCHANGE_FORWARD := 0x2
    KeyWait, LControl, D T.3
    if !ErrorLevel {
        ControlGetFocus, CtrlFocus, A
        PostMessage, WM_INPUTLANGCHANGEREQUEST, INPUTLANGCHANGE_FORWARD,, %CtrlFocus%, A
    }
Return

Win+H по тому же принципу.

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