Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Autohotkey ; 作为一个新的修改键_Autohotkey_Modifier Key - Fatal编程技术网

Autohotkey ; 作为一个新的修改键

Autohotkey ; 作为一个新的修改键,autohotkey,modifier-key,Autohotkey,Modifier Key,我想要将成为一个新的修改键。以下功能几乎完美无瑕 `;:: if GetKeyState("LShift", "P") Send `: else Send `; return `; & x:: if GetKeyState("LShift", "P") ... else ... return 只有第2点。以下愿望列表中的任何一个都不起作用。有人知道如何修复这个代码吗 将成为单独按下时 shift单独按下时为: 与x一起作为第二个… shift带与x一起

我想要
将成为一个新的修改键。
以下功能几乎完美无瑕

`;::
if GetKeyState("LShift", "P")
    Send `:
else
    Send `;
return

`; & x::
if GetKeyState("LShift", "P")
    ...
else
    ...
return
只有第2点。以下愿望列表中的任何一个都不起作用。有人知道如何修复这个代码吗

  • 将成为
    单独按下时
  • shift单独按下时为
  • x
    一起作为第二个
  • shift
    x
    一起作为第一个

  • 在我看来,有两种可能的方式使第2点起作用

    方法1:保留左Shift键的默认行为

    移位+导致按下“冒号键。您可以通过在之前添加波浪线“~”键来获得第2点并删除

    else 
        send `;
    
    使用~可以保留密钥的默认行为。新脚本的外观如下所示

    ~`;::
        if GetKeyState("LShift", "P") 
            Send `:
    return 
    
    `; & x::
        if GetKeyState("LShift", "P")
            ...
        else
            ...
    return
    
    通过使用此方法,脚本将能够使用shift+发送

    方法2:删除左Shift键的默认行为

    在代码中添加以下代码段

    LShift::
        Send, {} 
    return 
    
    这段代码将使第2点起作用,但将使左Shift键对其他所有内容几乎毫无用处

    编辑

    方法3:制作
    等待
    x

    KeyWait
    添加到脚本中会使脚本在执行代码之前等待一定的时间。其次使用
    Lshift
    +
    作为一个单独的热键组合将输出到
    ,从而无需反过来使用
    ~

    `;::
    KeyWait, `;, T0.2
        Send `;
    return
    
    LShift & `;::
        Send `:
    return 
    
    `; & x::
    KeyWait, `;, T0.2 
    if GetKeyState("LShift", "P")
        ...
    else
        ...
    return 
    

    在我看来,有两种可能的方式使第2点起作用

    方法1:保留左Shift键的默认行为

    移位+导致按下“冒号键。您可以通过在之前添加波浪线“~”键来获得第2点并删除

    else 
        send `;
    
    使用~可以保留密钥的默认行为。新脚本的外观如下所示

    ~`;::
        if GetKeyState("LShift", "P") 
            Send `:
    return 
    
    `; & x::
        if GetKeyState("LShift", "P")
            ...
        else
            ...
    return
    
    通过使用此方法,脚本将能够使用shift+发送

    方法2:删除左Shift键的默认行为

    在代码中添加以下代码段

    LShift::
        Send, {} 
    return 
    
    这段代码将使第2点起作用,但将使左Shift键对其他所有内容几乎毫无用处

    编辑

    方法3:制作
    等待
    x

    KeyWait
    添加到脚本中会使脚本在执行代码之前等待一定的时间。其次使用
    Lshift
    +
    作为一个单独的热键组合将输出到
    ,从而无需反过来使用
    ~

    `;::
    KeyWait, `;, T0.2
        Send `;
    return
    
    LShift & `;::
        Send `:
    return 
    
    `; & x::
    KeyWait, `;, T0.2 
    if GetKeyState("LShift", "P")
        ...
    else
        ...
    return 
    

    下面的代码工作得很好,但由于代码重复,代码很难看。也许更干净的代码是可能的

    started := 0
    LShift & `;::
    if started = 0
        started := A_TickCount
    return
    `;::
    if started = 0
        started := A_TickCount
    return
    
    LShift & `; Up::
    if A_TickCount - started < 500
        Send `:
    started = 0
    return
    
    `; Up::
    if A_TickCount - started < 500
        Send `;
    started = 0
    return
    
    `; & x::
    started = 0 ; <==== !
    if GetKeyState("LShift", "P")
        ...
    else
        ...
    return
    
    已启动:=0
    LShift&`;::
    如果启动=0
    已开始:=A_TickCount
    回来
    `;::
    如果启动=0
    已开始:=A_TickCount
    回来
    LShift&`;向上::
    如果A_TickCount-开始<500
    发送`:
    开始=0
    回来
    `; 向上::
    如果A_TickCount-开始<500
    发送`;
    开始=0
    回来
    `; & x::
    
    开始=0 下面的代码工作得很好,但由于代码重复,代码很难看。也许更干净的代码是可能的

    started := 0
    LShift & `;::
    if started = 0
        started := A_TickCount
    return
    `;::
    if started = 0
        started := A_TickCount
    return
    
    LShift & `; Up::
    if A_TickCount - started < 500
        Send `:
    started = 0
    return
    
    `; Up::
    if A_TickCount - started < 500
        Send `;
    started = 0
    return
    
    `; & x::
    started = 0 ; <==== !
    if GetKeyState("LShift", "P")
        ...
    else
        ...
    return
    
    已启动:=0
    LShift&`;::
    如果启动=0
    已开始:=A_TickCount
    回来
    `;::
    如果启动=0
    已开始:=A_TickCount
    回来
    LShift&`;向上::
    如果A_TickCount-开始<500
    发送`:
    开始=0
    回来
    `; 向上::
    如果A_TickCount-开始<500
    发送`;
    开始=0
    回来
    `; & x::
    
    开始=0;谢谢,但使用方法1,按
    立即生成
    ,而不是等待一个
    x
    作为修改键,并使用方法2,使左移位键对其他组合键完全无用,这实际上不是一个选项。等待是不可接受的。你能给我解释一下
    之间的不对称性吗
    在我最初的近似解决方案中。谢谢,但使用方法1,只需按
    立即生成
    ,而不是等待一个
    x
    作为修改键,并使用方法2,使左移位键对其他组合键完全无用,这实际上不是一个选项。等待是不可接受的。你能给我解释一下
    之间的不对称性吗
    在我最初的几乎所有的解决方案中。对我有效。你能用另一个键盘测试它吗?有些键盘不能处理三个键的特定组合,这就是众所周知的。谢谢你的解释,但这不是原因。我用一个外置键盘测试了它,发现了同样的问题:如果我先按住shift键,然后按
    键,就会立即键入
    。这是我在问题中遇到的最初问题。我无法解释为什么它不会发生在
    无移位。对我有效。你能用另一个键盘测试它吗?有些键盘不能处理三个键的特定组合,这就是众所周知的。谢谢你的解释,但这不是原因。我用一个外置键盘测试了它,发现了同样的问题:如果我先按住shift键,然后按
    键,就会立即键入
    。这是我在问题中遇到的最初问题。我无法解释为什么它不会发生在
    无移位。