我正在尝试为工作中的某些东西实现视觉工作室般的热键链接。
基本上,当我按下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
我很确定这不会起作用,但我想我会试一试,以免你认为我只是要求用汤匙喂食。
我并没有和AHK一起工作过很多次,但是我已经用它来完成家庭和工作中的一些事情了,但是它太过分了 - 就像我对AHK的经历一样。
使用#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
正如stevecody所示,使用#If
是一个不错的选择。以下是另一种可能适合您的解决方案。它使用您的^+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%
}
}