1 (изменено: eavolkov89, 2022-04-28 17:52:36)

Тема: AHK: тройные горячие клавиши

Привет формучане!

Если по короче, то понимаю что в AHK нельзя использовать тройные горячие клавиши, если как минимум 2 из них не являются контролами, шифтами, альтами и т.д., а состоят из обычных кнопок.

Загуглив нашел 2 варианта обхода этого недостатка AHK, 1 вариант:


#if GetKeyState("ScrollLock") && GetKeyState("LShift")
i:: send {LShift Up}
j:: send {LShift Left}
l:: send {LShift Right}
k:: send {LShift Down}
return

В этом случае не срабатывает сама горячая связка клавиш. Мне нужно чтобы происходили перемещения каретки с выделением текста, т.е. эмулировались сочетания Shift + Up, Shift + Left и так далее. Вместо этого просто печатаются заглавные буквы I J K...

Второй вариант:


#if GetKeyState("ScrollLock")
+i:: send {LShift Up}
+j:: send {LShift Left}
+l:: send {LShift Right}
+k:: send {LShift Down}
return

Тут я зажатие шифта переношу из if условия, в тело условия. В итоге вообще ничего не происходит, каретка стоит на одном месте как вкопанная.

Помогите пожалуйста понять что я делаю не так. На всякий случай повторюсь, нужно чтобы при зажатии клавиш ScrollLock + Shift + буквы (например i, j, l, k), моя каретка бегала по тексту как будто я нажимаю вместо букв стрелочки, и с зажатым шифтом, т.е. выделяла текст.

Мне кажется ошибка в синтаксисе команды send, пробовал по всякому обозначать требуемые сенды, но ни один вариант не срабатывал. Помогите, пожалуйста!

2

Re: AHK: тройные горячие клавиши

Так пробовали?

send, {LShift down}{up}{LShift up}
Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

3 (изменено: eavolkov89, 2022-04-28 18:51:30)

Re: AHK: тройные горячие клавиши

Phoenixxx_Czar пишет:

Так пробовали?

send, {LShift down}{up}{LShift up}

Не пробовал Спасибо!

Можно ещё вопросик пожалуйста! А есть ли в AHK возможность перехватывать нажатие кнопки? Если я нажимаю ALT, то большинство программ интерпретируют это как свои внутренние горячие клавиши, и дальше уже все что я нажму дополнительно, могут вообще не выполнять, например, окно программы становится неактивным для ввода, потому что перефокусируются на свое меню... ожидает что я в них буду ковыряться... А мне просто каретку надо передвинуть не уводя руку на обычные стрелочки.

Можно ли как-то сделать так, чтобы при нажатии ALT, срабатывало например LShift + Up, но при этом сам ALT как будто не нажимался для все остальных программ, кроме AHK ?

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

4

Re: AHK: тройные горячие клавиши

Это ж надо было такое выдумать!

#If GetKeyState("ScrollLock") && GetKeyState("LShift")

*I:: Send +{Up}
*J:: Send +{Left}
*L:: Send +{Right}
*K:: Send +{Down}
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

5 (изменено: eavolkov89, 2022-04-28 18:57:44)

Re: AHK: тройные горячие клавиши

__Михаил__ пишет:

Это ж надо было такое выдумать!

Ну.. если вы про саму суть задачи, то не хочется переносить правую руку на стрелочки, бекспейсы, делейты, энтеры. Хочется чтобы руки оставались всегда на ФЫВА ОЛДЖ
Для этого нужно зажимать что-то... были варианты с кнопками WIN и ALT, в итоге у WIN куча своих горячих виндовых сочетаний, а на ALT большинство программ вешает свои внутренние горячие клавиши, и либо надо снести их прямо во всех программах, и у некоторых есть прямо несносимые сочетания.. короче беда Перепрошил клаву так чтобы вместо альта был никому не нужный скролллок, но иногда оч нужен привычный альт, и внезапно понял что у меня по-умолчанию мышь чувствительна к скроллоку, меняет её режим работы и это никак не отключить в мышке. В общем одни беды

6 (изменено: eavolkov89, 2022-04-28 19:01:23)

Re: AHK: тройные горячие клавиши

__Михаил__ пишет:

Это ж надо было такое выдумать!

Идеально это научиться перехватывать нажатие ALT, а сам скрипт сделать двух режимным, типа в режиме OFF ничего не происходит, все как обычно работает, а в режиме ON скрипт начинает перехватывать нажатие ALT, выполняет то что я в него запрограммирую, и главное - не отправляет нажатие ALT дальше в винду и программы, будто этого нажатия не происходило

7

Re: AHK: тройные горячие клавиши

Я бы проще сделал: нажал некую клавишу - режим перехвата кнопок I, J, K, L включился, выполнил действия, снова нажал - перехват выключился.

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

8

Re: AHK: тройные горячие клавиши

__Михаил__ пишет:

Я бы проще сделал: нажал некую клавишу - режим перехвата кнопок I, J, K, L включился, выполнил действия, снова нажал - перехват выключился.

Идеально чтобы такой клавишей и был ALT Но я не знаю как технически в коде реализовать перехват, так чтобы ни винда ни другие программы не словили нажатие альта. Иначе они могут уходить в свои внутренние горячие клавиши...

9

Re: AHK: тройные горячие клавиши

Модификаторы такая вещь - их лучше не трогать от греха подальше. Можно пробовать полный перехват клавиатуры, возможно что-то выйдет. В поиске ищите: 'Клавиатурный хук' и т.д.

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

10

Re: AHK: тройные горячие клавиши

__Михаил__

Вы навели на мысль! InputHook() похоже поможет, сейчас попробую!