Как создать цепочку горячих клавиш в стиле Visual Studio, используя AHK? - PullRequest
1 голос
/ 24 апреля 2019

Я пытаюсь создать цепочку горячих клавиш для чего-то на работе, похожую на визуальную студию.

В основном, когда я нажимаю Ctrl + Alt + F, я хочу войти в своего рода «Режим форматирования».«Следующая клавиша, которую я нажму, определит, какой текст вводится.Я бы хотел, чтобы «Режим форматирования» прекратился, как только была нажата одна из внутренних горячих клавиш.Однако я также хотел бы иметь возможность отменить его вручную на всякий случай.

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

;
;; Format Mode
;
^+f::

    ; Bold
    b::
        Send "<b></b>"
        Send {Left 4}
    return

    ; Italics
    i::
        Send "<i></i>"
        Send {Left 4}
    return

    ; Bulleted List
    u::
        Send "<u></u>"
        Send {Left 4}
    return

    ; Numbered List
    o::
        Send "<o></o>"
        Send {Left 4}
    return

    ; List Item
    l::
        Send "<li></li>"
        Send {Left 4}
    return

    ; Line Break
    r::
        Send "<br/>"
    return

return

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

Я не очень много работал с AHK, но я использовал его достаточно, чтобы иметь возможность выполнять какие-то вещи как дома, так и на работе, но это очень грязно - как фонпо моему опыту с AHK.

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

Использование #If - хороший выбор, как показал stevecody. Ниже приведено еще одно решение, которое может работать на вас. Он использует вашу горячую клавишу ^+f для активации специальных горячих клавиш. Специальные горячие клавиши также деактивируются при использовании. f1 - это возможность отменить его вручную.

^+f::
Hotkey , b , l_Bold , On
Hotkey , i , l_Italics , On
Hotkey , l , l_ListItem , On
Return

f1::
Hotkey , b , l_Bold , Off
Hotkey , i , l_Italics , Off
Hotkey , l , l_ListItem , Off
Return

l_Bold:
Hotkey , b , l_Bold , Off
Send , <b></b>{left 4}
Return
l_Italics:
Hotkey , i , l_Italics , Off
Send , <i></i>{left 4}
Return
l_Italics:
Hotkey , l , l_ListItem , Off
Send , <li></li>{left 5}
Return

Что-то еще, на что я смотрел, но это не совсем правильно, ниже. Проблема в том, что он все равно отправит специальный ключ, и вы получите что-то вроде <i>i</i> вместо <i></i>.

f1::
KeyBdHook := DllCall(   "SetWindowsHookEx" , "int" , 13  , "uint" , RegisterCallback( "KeyBdProc" ) , "uint" , 0 , "uint" , 0 )
input
Return

KeyBdProc( nCode , wParam , lParam )
{
    global KeyBdHook
    Critical
    If ( wParam = 0x100 )
    {
        DllCall( "UnhookWindowsHookEx" , "ptr" , KeyBdHook )
        sKey := GetKeyName( Format( "vk{:x}" , NumGet( lParam + 0 , 0 , "int" ) ) )
        If ( sKey = "i" )
            Send , <i></i>{left 4}
        Else
            MsgBox , You pressed %sKey%
    }
}
2 голосов
/ 24 апреля 2019

С помощью команды #if вы можете переключаться / переключаться между action1 / Enable и action2 / Disable с теми же горячими клавишами.

Вы можете проверить это в Блокноте. если вы потом наберете ключ t

нажмите клавиши Ctrl + Shift + f для переключения между двумя одинаковыми горячими клавишами.

Примечание: для своих горячих клавиш вы можете немного изменить код! Вы можете поместить все свои горячие клавиши в #if Mode1, а затем не использовать горячие клавиши в #if Mode2

Example1.ahk

; [+ = Shift] [! = Alt] [^ = Ctrl] [# = Win] 
#SingleInstance force

a := 1 

#If mode1 ; All hotkeys below this line will only work if mode1 is TRUE or 1
    t::
    send 1
    ; Here you can put your first hotkey code 
    return 

   ; Here you can Place All your Hotkeys       
#If

#If mode2 ; All hotkeys below this line will only work if mode2 is TRUE or 1
    t::
    send 2
    ; And here you can put your second hotkey code 
    return        
#If

; toggle between [t::1] and [t::2]
;a = 1   => t::1
;a = 2   => t::2

;type Ctrl+Shift+f keys to toggle between two the same hotkeys
;you can test it out in notepad - if you then type the key t
^+f::  
if (a=1)
{
mode1 = 1
mode2 = 0
a := 2
}else{
mode1 = 0
mode2 = 1
a := 1
}
return

esc::exitapp 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...