这是我脚本的一部分:
~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,有时它不会保持按下。此外,这种方法还有其他缺点,所以我不想使用它。
答案 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代码,这意味着它与布局无关。
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键的问题?