Autohotkey布局独立“输入”。等待任何钥匙。 “输入”替代品

时间:2015-09-06 14:59:05

标签: input autohotkey

这是我脚本的一部分:

~LWin Up::
  Input, key, L1
  if (key = "n") {
    Run, Notepad.exe
  }
  else if (key = "s") {
    Run, cmd.exe
  }      
return

释放LWin后,等待按下另一个键,然后运行与该键对应的应用程序。问题是,如果我切换到俄语布局''转向'ы',脚本将无法正常工作。

如何使其独立布局?复制'ы'的代码不是选项。

解决方案可能是这样的:

#n::
#s::
  stringsplit, splitted_, A_ThisHotkey
  key := splitted_2
  if (key = "n") {
    Run, Notepad.exe
  }
  else if (key = "s") {
    Run, cmd.exe
  }
  Send {LWin up} ; release LWin
return

~LWin Up::
  stringsplit, splitted_, A_PriorHotkey
  if (splitted_1 = "#") { ; if win+key combo has just been released
    return                ; no need to keep LWin down
  }
  Send {LWin down}        ; else keep it down
return

我已经尝试过但它无法正常工作。有时它不会释放LWin,有时它不会保持按下。此外,这种方法还有其他缺点,所以我不想使用它。

1 个答案:

答案 0 :(得分:1)

您的第一个脚本似乎可以使用最新的Unicode版本的AutoHotkey。获取最新版本@ ahkscript.org

在下面的代码中添加了对“ы”的检查:

~LWin Up::
  Input, key, L1
  if (key = "n" or key = "ы") {
    Run, Notepad.exe
  }
  else if (key = "s") {
    Run, cmd.exe
  }      
return

确保使用UTF-8脚本编码(不使用没有BOM的UTF-8)

编辑:

好吧我想我找到了一个答案,它不需要你添加“ы”,而是依赖于键盘产生的SC代码,这意味着它与布局无关。

accepted()

  

E [v1.1.20 +]:按字符代码处理单字符结束键   而不是键码。如果这样可以提供更一致的结果   活动窗口的键盘布局与脚本的键盘不同   布局。它还可以防止实际上不会产生的键组合   结束输入的给定结束字符;例如,如果@是一个   结束键,在US布局上Shift + 2将触发它但Ctrl + Shift + 2   不会(如果使用E选项)。如果还使用C选项,则   结束字符区分大小写。

     

EndKeys零个或多个键的列表,其中任何一个键都终止   按下时输入(EndKey本身不写入OutputVar)。   当Input以这种方式终止时,ErrorLevel被设置为该单词   EndKey后跟冒号和EndKey的名称。例子:   EndKey:。,EndKey:Escape。

     

EndKey列表使用与Send命令类似的格式。对于   例如,指定{Enter}。{Esc}将导致ENTER,period   (。),或ESCAPE终止输入。将大括号本身用作   结束键,请指定{{}和/或{}}。

     

要使用Control,Alt或Shift作为结束键,请指定左侧和/或   正确版本的密钥,而不是中性版本。例如,   指定{LControl} {RControl}而不是{Control}。

     

虽然不支持修改后的密钥,例如Control-C(^ c),   需要按住Shift键的某些字符 -   即标点符号,例如?!:@& {} - 在v1.0.14 +中受支持。   上面描述的E选项支持其他字符   v1.1.20 +。

     

还可以指定显式虚拟键代码,例如{vkFF}。   这在密钥没有名称和产生的极少数情况下很有用   按下时没有可见的字符。它的虚拟键码可以   通过按照键列表页面底部的步骤确定。

~LWin Up::
  Input, key, L1 E, {SC031}.{SC01F} ; {n}.{s}
  if (Errorlevel = "EndKey:SC031") {
    Run, Notepad.exe
  }
  If (Errorlevel = "EndKey:SC01f") {
    Run, cmd.exe
  }
return

另外,我无法重现按住Windows键的问题?