Прослушивание Eval/RegExp с помощью Autohotkey

Я думаю, что это должно быть возможно, но я не могу найти его нигде в документации по autohotkey.

Я хочу сделать что-то вроде:

[a-z0-9]::
SoundPlay, %A_WinDir%\Media\[\1].wav
SoundPlay *-1 

то есть прослушайте все ключи от a до z и 0-9, найдите соответствующий файл wav (a.wav и т. д.) и воспроизведите его. Если его не удается найти Воспроизведение звука по умолчанию.

Это выход из лиги AHK? Должен ли я придерживаться этого в python??! Спасибо заранее


person willwade    schedule 14.05.2012    source источник


Ответы (3)


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

Первый цикл здесь использует трюк с преобразованием значений в их коды ASCII, выполнением математических операций и преобразованием их обратно в символы. . Логика работает так: "Какой 5-й символ после 'a'?", на что он отвечает 'f'.

#Persistent 

Loop, 26
  Hotkey, % Chr(Asc("a") + A_Index - 1), MyLabel

Loop, 10
   Hotkey, % A_Index - 1, MyLabel
return

MyLabel:
MsgBox You pressed %A_ThisHotkey%
return
person Brigand    schedule 15.05.2012

Я не знаю, как использовать регулярное выражение для указания горячей клавиши, но вот как я это сделал в одном из своих скриптов:

@::
a::
b::
c::
; (all other alpha keys...)
    ; Pass key on, if not in subscription list
    If(in_edit_screen())
    {
        ; Handle caps lock
        If(GetKeyState("Capslock", "T"))
        {
            ; Send uppercase letter
            StringUpper key, A_ThisHotkey
            Send %key%
        }
        Else
        {
            Send %A_ThisHotkey%
        }
        Return
    }
    ; etc.
    Return

Это часть подпрограммы, которая вызывается всякий раз, когда фокусируется определенное окно, но рассматриваемое окно имеет несколько различных режимов; в одном из этих режимов (обозначается флагом in_edit_screen) я хочу просто передавать ключи, а в другом режиме я хочу, чтобы ключи делали что-то особенное. A_ThisHotkey — это переменная, которая сообщает подпрограмме, какую клавишу/комбинацию клавиш пользователь фактически нажал.

person echristopherson    schedule 15.05.2012
comment
Отредактировано. Я забыл отметить, что я перечисляю каждую букву отдельно. - person echristopherson; 15.05.2012

Почему бы не запустить скрипт, где вы используете:

Вход, CI_KeyVar, I L1

а затем прочитайте, какая клавиша была нажата (переменная = CI_KeyVar), сделайте свое дело (проверьте, находится ли код ascii между 0 и Z, потому что этот ввод будет действовать на любой ввод) и перезапустите скрипт, чтобы дождаться следующего ключа Нажмите....

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

person Robert Ilbrink    schedule 16.05.2012