发表回复 
热键问题!
2016-12-26, 16 : 39
热键问题!
设1,2,3三个热键,按下1键,则无论是否有按到2或3键都只执行1键,请问怎么写?
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2016-12-27, 08 : 49
RE: 热键问题!
后触发的热键的过程会挂起其前面的,与#MaxThreadsPerHotkey设置有关
则,按下1,不论2、3是否正在执行,都会执行1。

感觉你的问题没说清楚,
  • 是按下1,结束2、3吗?
  • 或,按下1,停用2、3吗?

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2016-12-27, 10 : 05
RE: 热键问题!
(2016-12-27 08 : 49)robertL 提到:  后触发的热键的过程会挂起其前面的,与#MaxThreadsPerHotkey设置有关
则,按下1,不论2、3是否正在执行,都会执行1。

感觉你的问题没说清楚,
  • 是按下1,结束2、3吗?
  • 或,按下1,停用2、3吗?

不好意思,没说清楚,是按下1,停用2、3
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2016-12-27, 11 : 05
RE: 热键问题!
按下1的热键过程中,添加一个记录1是否按下状态的变量
在2、3的热键条件#If中判断,或热键过程中判断此条件。

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2016-12-27, 12 : 10 (这个帖子最后修改于: 2016-12-27 13 : 27 by robertL.)
RE: 热键问题!
(2016-12-27 11 : 05)robertL 提到:  按下1的热键过程中,添加一个记录1是否按下状态的变量
在2、3的热键条件#If中判断,或热键过程中判断此条件。

我试过了,加了条件的话,在执行1键时,按了2键虽然不会执行2键,但会中断1键的执行
下面的我的代码,新手见谅,帮忙改下:

代码: (全选)
$2:: ;
Loop
{
    if not GetKeyState("2", "P") ;
    {
        break
    }
    if GetKeyState("2", "P")  and not GetKeyState("1", "P") ;
        Send, {2}
    Sleep,75 ;
}
return
$1:: ;
Loop
{
    if not GetKeyState("1", "P") ;
    {
        break
    }
    if GetKeyState("1", "P") and not GetKeyState("2", "P") ;
        Send, {1}
    Sleep,75 ;
}
return
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2016-12-27, 13 : 33
RE: 热键问题!
试试分别先后按住1、2/2、1。1更优先。
代码: (全选)
1::
    d:=true
    while(d)
        Tooltip 1
    return
1 up::
    d:=false
    return
#if not d
2::
    Tooltip 2
    return

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2016-12-27, 13 : 57
RE: 热键问题!
(2016-12-27 13 : 33)robertL 提到:  试试分别先后按住1、2/2、1。1更优先。
代码: (全选)
1::
    d:=true
    while(d)
        Tooltip 1
    return
1 up::
    d:=false
    return
#if not d
2::
    Tooltip 2
    return

先按住1再按2还是显示2=。=
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2016-12-27, 15 : 05
RE: 热键问题!
不会显示2了吧,热键2彻底失效——因为热键前的条件#If未满足,如同没有定义热键2一样,于是会输入2。
不希望这样的话,可以改我
代码: (全选)
2::
    if d
        return
    Tooltip 2
    return

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢robertL
2016-12-27, 16 : 32
RE: 热键问题!
(2016-12-27 15 : 05)robertL 提到:  不会显示2了吧,热键2彻底失效——因为热键前的条件#If未满足,如同没有定义热键2一样,于是会输入2。
不希望这样的话,可以改我
代码: (全选)
2::
    if d
        return
    Tooltip 2
    return

先谢谢之前的回答,现在实现按2键不影响按1键了,那同个脚本里能不能按1键时也不影响2键执行,即我按1键那2键无效,按2键时1键无效,麻烦您了
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2016-12-27, 18 : 08
RE: 热键问题!
leplep 提到:按1键时也不影响2键执行,即我按1键那2键无效
有点矛盾啊..

汗..就是上面方法的组合嘛。
和你最初的GetKeyState也类似——记录状态,设定分支使用状态做条件

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2016-12-28, 09 : 22 (这个帖子最后修改于: 2016-12-28 10 : 44 by robertL.)
RE: 热键问题!
(2016-12-27 18 : 08)robertL 提到:  
leplep 提到:按1键时也不影响2键执行,即我按1键那2键无效
有点矛盾啊..

汗..就是上面方法的组合嘛。
和你最初的GetKeyState也类似——记录状态,设定分支使用状态做条件

代码: (全选)
$1::
    if e
        return  
    else
    {
        d:=true
        while (d) ;
            Send, {1}
        return
    }
$1 up::
    d:=false
    return

$2 up::
    e:=false
    return

$2::
    if d
        return
    else
    {
        e:=true
        while  (e) ;
            Send, {2}
        return
    }
新手乱组合的,按下1再按2就停止了=。=
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2016-12-28, 09 : 58
RE: 热键问题!
这个问题不是在《多持续互斥热键过程的示例》中已经讨论了吗?看看那一贴就行了。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢feiyue
2016-12-28, 10 : 50
RE: 热键问题!
可以试试while(d && not e),则,仅自身按下且另一按键未按下时执行。
不是太明白你最终的目标。
leplep 提到:按1键时也不影响2键执行,即我按1键那2键无效,按2键时1键无效

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2016-12-28, 11 : 36 (这个帖子最后修改于: 2016-12-28 11 : 48 by leplep.)
RE: 热键问题!
(2016-12-28 09 : 58)feiyue 提到:  这个问题不是在《多持续互斥热键过程的示例》中已经讨论了吗?看看那一贴就行了。

好吧,新手表示看不懂=。=,能帮忙写个按1,2,3键的实例吗,谢谢了

(2016-12-28 10 : 50)robertL 提到:  可以试试while(d && not e),则,仅自身按下且另一按键未按下时执行。
不是太明白你最终的目标。
leplep 提到:按1键时也不影响2键执行,即我按1键那2键无效,按2键时1键无效

我的目标就是:设1,2,3三个热键,当按住1键不放时,2和3两个热键失效,当按住2键不放时,1和3两个热键失效,当按住3键不放时,2和1两个热键失效
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2016-12-28, 14 : 49 (这个帖子最后修改于: 2016-12-28 15 : 03 by robertL.)
RE: 热键问题!
代码: (全选)
1::
    while(A_Thishotkey==A_ThisLabel && GetKeyState(A_ThisLabel))
        Tooltip 1
    return
2::
    while(A_Thishotkey==A_ThisLabel && GetKeyState(A_ThisLabel))
        Tooltip 2
    return
3::
    while(A_Thishotkey==A_ThisLabel && GetKeyState(A_ThisLabel))
        Tooltip 3
    return
这样?@leplep
或者
代码: (全选)
#if not ( button2down or button3down)
1::
    button1down:=true
    Tooltip 1
    return
#if not ( button1down or button3down)
2::
    button2down:=true
    Tooltip 2
    return
#if not ( button1down or button2down)
3::
    button3down:=true
    Tooltip 3
    return
#if
1 up::button1down:=false
2 up::button2down:=false
3 up::button3down:=false

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢robertL
2016-12-28, 16 : 24 (这个帖子最后修改于: 2016-12-28 18 : 00 by leplep.)
RE: 热键问题!
(2016-12-28 14 : 49)robertL 提到:  
代码: (全选)
1::
    while(A_Thishotkey==A_ThisLabel && GetKeyState(A_ThisLabel))
        Tooltip 1
    return
2::
    while(A_Thishotkey==A_ThisLabel && GetKeyState(A_ThisLabel))
        Tooltip 2
    return
3::
    while(A_Thishotkey==A_ThisLabel && GetKeyState(A_ThisLabel))
        Tooltip 3
    return
这样?@leplep
或者
代码: (全选)
#if not ( button2down or button3down)
1::
    button1down:=true
    Tooltip 1
    return
#if not ( button1down or button3down)
2::
    button2down:=true
    Tooltip 2
    return
#if not ( button1down or button2down)
3::
    button3down:=true
    Tooltip 3
    return
#if
1 up::button1down:=false
2 up::button2down:=false
3 up::button3down:=false

用第二段代码解决了,谢谢大大们,辛苦了!
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2016-12-28, 16 : 45 (这个帖子最后修改于: 2016-12-28 16 : 49 by feiyue.)
RE: 热键问题!
需要按住运行、松开停止的话,貌似这样就行了。@leplep 你那个 AHK_L 的版本太低了。

代码: (全选)
$1::
$2::
$3::

;-- 提高优先级来屏蔽其他的热键,直到过程结束
Thread, priority, 1
Key:=Trim(A_ThisLabel,"#^!+<>~*$")
while GetKeyState(key,"P")
{
  Tooltip, %key%-%A_Index%
}
Tooltip
Return
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 2用户表示感谢feiyue
发表回复 


论坛跳转:


联系我们 | Autohotkey 中文站 | 回到顶部 | 回到正文区 | 精简(归档)模式 | RSS 聚合