Autohotkey “发送的空格键” &引用;(无中断空间)当CapsLock状态为关闭时,否则在自动热键中发送常规空间

Autohotkey “发送的空格键” &引用;(无中断空间)当CapsLock状态为关闭时,否则在自动热键中发送常规空间,autohotkey,Autohotkey,我试图通过space键发送一个非中断空格(),只有在CapsLock打开时,否则发送常规空格键 我尝试了以下几种不同的变体,但没有一种是完全正确的 $~Space:: GetKeyState, state, CapsLock, T if state = D send, { } ; non-break space else send, { } ; regular space Return 它似乎总是发送常规空格($~,或者只发送~)

我试图通过
space
键发送一个非中断空格(),只有在CapsLock打开时,否则发送常规空格键

我尝试了以下几种不同的变体,但没有一种是完全正确的

$~Space::
    GetKeyState, state, CapsLock, T
    if state = D
        send, { } ; non-break space
    else
        send, { } ; regular space
    Return
它似乎总是发送常规空格(
$~
,或者只发送
~
),或者根本不发送(只发送
$
),或者根本不工作(既不发送
$
,也不发送
~

下面列出了我在相应结果中使用的
$
/
~
文字的不同变体:

为了方便起见,我将假装要使用字符
n
而不是非换行符

按空格键时,除第一行外,上述代码保持不变:

  • $~空格::
    • 封盖锁定关闭:发送
      (良好)
    • 大写锁定:发送
      n
      (为什么需要额外的空间?)
  • $Space::
    • 大写锁定:不发送任何内容
    • 大写锁定:发送
      n
      (良好)
  • ~空格::
    • 封盖锁定关闭:发送
      (良好)
    • 大写锁定:发送
      n
      (为什么需要额外的空间?)
  • 空格::
    • 大写锁定:不发送任何内容
    • 大写锁定:发送
      n
      (良好)
正确的方法是什么?

试试下面的代码:


第1版:

$~Space::

    if (GetKeyState("CapsLock", "T") = 1)
    {
       send, { } ; non-break space 
    }
    else
    {
       send, { } ; regular space
    }

return
$~Space::

    if (GetKeyState("CapsLock", "T") = 1)
    {
       Send, {Backspace}
       send, { } ; non-break space 
    }
    else
    {
       send, { } ; regular space
    }

return



第2版:

$~Space::

    if (GetKeyState("CapsLock", "T") = 1)
    {
       send, { } ; non-break space 
    }
    else
    {
       send, { } ; regular space
    }

return
$~Space::

    if (GetKeyState("CapsLock", "T") = 1)
    {
       Send, {Backspace}
       send, { } ; non-break space 
    }
    else
    {
       send, { } ; regular space
    }

return



Capslock状态检查在我的代码中运行良好。我不知道规则空格和非规则空格之间有什么不同(我处理了代码“原样”中的
Send
命令),所以请检查Send的空格是否正确。


忠告:

  • 使用
    GetKeyState
    内置函数代替命令

  • 始终将
    if
    语句条件置于
    ()

  • 始终在
    {}
    中使用include
    if
    语句体

  • 始终使用自动热键及其文档(当前最新版本,新官方网站)!AutoHotkey及其AutoHotkey.com上的文档已过时,您可能在使用它们时遇到一些问题

  • 如果使用ahk 1.1+来自

    试试这个:

    #if GetKeyState("CapsLock", "T")
    $space::send n
    return
    

    希望它能有所帮助

    当它应该只发送
    时,它也会发送两个空格(
    )。您可以使用任何字符(如“n”)代替nb空格。当caps lock关闭时,它发送
    。Capslock检查在我的原始代码中也可以正常工作。问题是它总是要么随nb空间一起发送规则空间,要么不一起发送规则空间。@laggingreflect请尝试第2版。我想它能满足你的需要。太好了!旁注:需要另一个
    #if
    来结束条件语句