接触autohotkey一段时间了,很不错的软件,自己摸索的时候有几个功能无法实现,希望大家帮帮忙。
1.快速(时间可调最好)连按两次同一数字键(如11),可以实现win+数字(切换到特定程序,无视输入框)
2.在chrome inactive(未激活)时,ctrl+t 发送到 win+1 以及 ctrl+t(非chrome页面按ctrl+t直接打开chrome新标签页)。chrome激活时还是指向ctrl+t。
第一个完全不知道如何下手,第二个尝试了下,但不行,如下。
原有脚本:
!Esc::Send !{F4}
;Vim Key Binding
#if ( A_Cursor = "IBeam" or A_CaretX >= 100 )
{
^o::send {down}
^u::send {left}
^i::send {up}
^p::send {right}
}
#ifwinactive ahk_class Chrome_WidgetWin_1
{
^m::send ^w ;关闭当前标签页
return
^.::send ^{tab} ;切换到下一个标签页
return
^,::send ^+{tab} ;切换到上一个标签页
^/::send ^+t ;打开刚刚关闭的标签页
F1::send ^t ;新标签页
!Esc::Send #d
}
第二个功能我写的:
#IfWinNotActive Chrome
{
^t::send #1 ^t
}
缺点:chorme非激活时可以实现,但chrome激活时会最小化chrome。
#IfWinNotActive ahk_class Chrome_WidgetWin_1
{
^t::send #1 ^t
}
缺点:(激活,非激活均可实现)但以下功能失效。
;Vim Key Binding
#if ( A_Cursor = "IBeam" or A_CaretX >= 100 )
{
^o::send {down}
^u::send {left}
^i::send {up}
^p::send {right}
}
非常感谢!
新人问题,帮我改进下这个功能(连按数字实现win+数字),谢谢~
Moderators: tmplinshi, arcticir
Re: 新人问题,帮我改进下这个功能(连按数字实现win+数字),谢谢~
双击示例:
第二点理解没太明白。你意思是 Chrome 未激活时,按 Ctrl+t 就激活它,并发送 Ctrl+t,也发送另外一个快捷键 Win+1 吗?试试这个:
Code: Select all
~1::
; 如果现在这个按键等于上一个按键,并且两次按键间隔小于 300 毫秒
If (A_ThisHotKey = A_PriorHotKey) && (A_TimeSincePriorHotkey < 300)
Send, #1
Return
~Control & ~LButton::
If (A_ThisHotKey = A_PriorHotKey) && (A_TimeSincePriorHotkey < 300) && GetKeyState("Control", "P")
MsgBox, 你按住了 Ctrl,且双击鼠标左键
Return
; 可以写成函数方便调用
$^v:: ; 前缀“$”是为了避免快捷键发送快捷键本身,造成死循环。
If IsDoubleClick() ; 参数为空则使用默认值 300。如果要用其他时间,比如 500 毫秒则用 IsDoubleClick(500)
MsgBox, 你按了两次 Ctrl+V
Else
Send, ^v
Return
IsDoubleClick(MSec = 300) {
Return (A_ThisHotKey = A_PriorHotKey) && (A_TimeSincePriorHotkey < MSec)
}
Code: Select all
#IfWinNotActive, ahk_class Chrome_WidgetWin_1
$^t:: ; 前缀“$”是为了避免快捷键发送快捷键本身,造成死循环。
If WinExist("ahk_class Chrome_WidgetWin_1") {
WinActivate
WinWaitActive
Send, ^t
}
Send, #1
Return
#If ; 如果下面还有快捷键,并且是全局的,那么需要用“#If”或者“#IfWinActive”、"#IfWinNotActive" 来恢复全局
Re: 新人问题,帮我改进下这个功能(连按数字实现win+数字),谢谢~
非常感谢!
试了一下,第二个功能实现地很好,
第一个可以实现,但是不能无视输入框,不知道autohotkey里有没有这样的函数可以实现?
再次感谢~~~~~
试了一下,第二个功能实现地很好,
第一个可以实现,但是不能无视输入框,不知道autohotkey里有没有这样的函数可以实现?
再次感谢~~~~~
tmplinshi wrote:双击示例:
第二点理解没太明白。你意思是 Chrome 未激活时,按 Ctrl+t 就激活它,并发送 Ctrl+t,也发送另外一个快捷键 Win+1 吗?试试这个:Code: Select all
~1:: ; 如果现在这个按键等于上一个按键,并且两次按键间隔小于 300 毫秒 If (A_ThisHotKey = A_PriorHotKey) && (A_TimeSincePriorHotkey < 300) Send, #1 Return ~Control & ~LButton:: If (A_ThisHotKey = A_PriorHotKey) && (A_TimeSincePriorHotkey < 300) && GetKeyState("Control", "P") MsgBox, 你按住了 Ctrl,且双击鼠标左键 Return ; 可以写成函数方便调用 $^v:: ; 前缀“$”是为了避免快捷键发送快捷键本身,造成死循环。 If IsDoubleClick() ; 参数为空则使用默认值 300。如果要用其他时间,比如 500 毫秒则用 IsDoubleClick(500) MsgBox, 你按了两次 Ctrl+V Else Send, ^v Return IsDoubleClick(MSec = 300) { Return (A_ThisHotKey = A_PriorHotKey) && (A_TimeSincePriorHotkey < MSec) }
Code: Select all
#IfWinNotActive, ahk_class Chrome_WidgetWin_1 $^t:: ; 前缀“$”是为了避免快捷键发送快捷键本身,造成死循环。 If WinExist("ahk_class Chrome_WidgetWin_1") { WinActivate WinWaitActive Send, ^t } Send, #1 Return #If ; 如果下面还有快捷键,并且是全局的,那么需要用“#If”或者“#IfWinActive”、"#IfWinNotActive" 来恢复全局
Re: 新人问题,帮我改进下这个功能(连按数字实现win+数字),谢谢~
你的意思是不输入快捷键对应的字符吗?直接写
只不过这样一来,你就没法再输入 1 了。
Code: Select all
1::
代码
Return
Re: 新人问题,帮我改进下这个功能(连按数字实现win+数字),谢谢~
我的意思是如果连按的话无视输入框,如果非连按的话还是正常输入。
不过这个功能我用7+ taskbar tweaker代替了, 实现的不错。
非常感谢你~
不过这个功能我用7+ taskbar tweaker代替了, 实现的不错。
非常感谢你~
tmplinshi wrote:你的意思是不输入快捷键对应的字符吗?直接写只不过这样一来,你就没法再输入 1 了。Code: Select all
1:: 代码 Return
Re: 新人问题,帮我改进下这个功能(连按数字实现win+数字),谢谢~
Code: Select all
$1::
If ( MSec := IsDoubleClick() )
ToolTip, 检测到快速双击! 双击速度: %MSec% 毫秒
Else
ToolTip
Return
IsDoubleClick(MSec = 200) {
static _count := 0, k
static fn := Func("IsDoubleClick").Bind("SendKey")
If (MSec = "SendKey") {
_count := 0
k := LTrim(A_ThisHotkey, "$")
k := GetKeyState("CapsLock", "T") ? Format("{:U}", k) : k
SendInput, % "{" k "}"
}
Else If (++_count <= 1) {
SetTimer, %fn%, % -1 * MSec
Return
} Else {
SetTimer, %fn%, Off
_count := 0
If (A_TimeSincePriorHotkey < MSec)
Return A_TimeSincePriorHotkey
}
}
测试了下,效果并不好,会影响短按,而且这也是必然的吧。因为你要“无视输入框”,那么必然要在双击耗时范围内屏蔽按键(200毫秒左右),然后才能进行单击、双击判断。而不屏蔽按键,就没法达到“无视输入框”。
Re: 新人问题,帮我改进下这个功能(连按数字实现win+数字),谢谢~
的确复杂,
我用autohotkey主要是改一下快捷键什么的,所以也不打算深入研究了……
谢谢你的帮助~
我用autohotkey主要是改一下快捷键什么的,所以也不打算深入研究了……
谢谢你的帮助~
tmplinshi wrote:我被绕晕了。。Code: Select all
$1:: If ( MSec := IsDoubleClick() ) ToolTip, 检测到快速双击! 双击速度: %MSec% 毫秒 Else ToolTip Return IsDoubleClick(MSec = 200) { static _count := 0, k static fn := Func("IsDoubleClick").Bind("SendKey") If (MSec = "SendKey") { _count := 0 k := LTrim(A_ThisHotkey, "$") k := GetKeyState("CapsLock", "T") ? Format("{:U}", k) : k SendInput, % "{" k "}" } Else If (++_count <= 1) { SetTimer, %fn%, % -1 * MSec Return } Else { SetTimer, %fn%, Off _count := 0 If (A_TimeSincePriorHotkey < MSec) Return A_TimeSincePriorHotkey } }
测试了下,效果并不好,会影响短按,而且这也是必然的吧。因为你要“无视输入框”,那么必然要在双击耗时范围内屏蔽按键(200毫秒左右),然后才能进行单击、双击判断。而不屏蔽按键,就没法达到“无视输入框”。
Re: 新人问题,帮我改进下这个功能(连按数字实现win+数字),谢谢~
"我用7+ taskbar tweaker代替了" 你好 麻烦请教下是如何用7+ taskbar tweaker实现的呢 ,好像没这个功能
Who is online
Users browsing this forum: No registered users and 21 guests