Windows 在使用罗马尼亚程序员布局输入罗马尼亚字符后发疯,同时使用 Autohotkey 重新映射 Alt/Ctrl/Win
Posted
技术标签:
【中文标题】Windows 在使用罗马尼亚程序员布局输入罗马尼亚字符后发疯,同时使用 Autohotkey 重新映射 Alt/Ctrl/Win【英文标题】:Windows going crazy after typing Romanian characters using a Romanian Programmers layout while remapping Alt/Ctrl/Win with Autohotkey 【发布时间】:2013-09-08 14:46:06 【问题描述】:我使用 Autohotkey 重新映射了一些键,如下所示:
LWin::LAlt
LCtrl::LWin
LAlt::LCtrl
我正在使用带有罗马尼亚语(程序员)键盘布局的 Windows 7。例如,如果我想输入 ă,我会按 RAt + a。之所以称为“程序员”,是因为它是一个常规的美国 QWERTY 布局,带有由 RAlt 激活的附加功能。
但是,如果我运行我的 Autohotkey 脚本,然后我发送一个 RAlt + a/s/t/i,系统就会变得疯狂。即使我关闭 Autohotkey,它的行为仍然如此。我必须注销/重新启动或按魔术键序列来修复它(我还没有弄清楚是什么序列)。
我猜发生的事情是 Alt 不知何故卡住了,我按下的每个键都与 Alt 混淆了。按 Esc 切换 Windows,在应用程序中按 F 可打开文件菜单等。
这是 Autohotkey 错误还是我做错了什么?
我过去为此使用过 SharpKeys,但由于某些要求 - 共享计算机 - 我需要每个用户的东西,最好可以关闭。 Autohotkey 非常适合这个。
谢谢。
后期编辑 - 解决方案是 576i(第一部分 + 键映射以替换我之前使用的键盘映射 - 我放弃了罗马尼亚程序员)
; Remap Ctrl to Win, Win to Alt, Alt to Ctrl - credit to 579i
$*LWin::Send LAlt Down
$*LWin Up::Send LAlt Up
$*LCtrl::Send LWin Down
$*LCtrl Up::Send LWin Up
$*LAlt::Send LControl Down
$*LAlt Up::Send LControl Up
; Keyboard mappings for Romanian letters
; First of all - GTK Windows are special and need special treatment
#IfWinActive, ahk_class gdkWindowToplevel
>!a::SendInput Control DownShift Downu0103Control UpShift Up
>!+a::SendInput Control DownShift Downu0102Control UpShift Up
>!q::SendInput Control DownShift Downu00E2Control UpShift Up
>!+q::SendInput Control DownShift Downu00C2Control UpShift Up
>!i::SendInput Control DownShift Downu00EEControl UpShift Up
>!+i::SendInput Control DownShift Downu00CEControl UpShift Up
>!s::SendInput Control DownShift Downu0219Control UpShift Up
>!+s::SendInput Control DownShift Downu0218Control UpShift Up
>!t::SendInput Control DownShift Downu021BControl UpShift Up
>!+t::SendInput Control DownShift Downu021AControl UpShift Up
; Then regular windows
#IfWinActive
>!a::Send ă
>!+a::Send Ă
>!q::Send â
>!+q::Send Â
>!i::Send î
>!+i::Send Î
>!s::Send ș
>!+s::Send Ș
>!t::Send ț
>!+t::Send Ț
[已编辑以包含 GTK 修复;这仍然不适用于控制台 Windows,粘贴时出现一些奇怪的故障,有时 Ctrl 被解释为 Alt]
【问题讨论】:
【参考方案1】:如果您的右 Alt 键是 Alt-Gr 键,它将是 解释为触发您的脚本的 LControl 和 RAlt。
而且看起来你在那里有一个无限循环。
看看这个例子,这应该更适合你。
热键前的 $ 可防止您使用的键 “发送”触发下一个热键。 * 确保 该键在与其他键一起按下时也有效。
$*LWin::Send LAlt Down
$*LWin Up::Send LAlt Up
$*LCtrl::Send LWin Down
$*LCtrl Up::Send LWin Up
$*LAlt::Send LControl Down
$*LAlt Up::Send LControl Up
这个重新映射可能仍然会杀死你的 Alt-Gr 键,如果 您的键盘驱动程序在内部发送“LControl & RAlt”。
您可以为 Alt-Gr 创建一个特殊的热键来解决此问题 或者 - 如果罗马尼亚语键盘只有几个 Alt-Gr 组合, 将它们定义为热键。
Autohotkey 帮助文件Hotkey 页面中的示例:
<^>!m::MsgBox You pressed AltGr+m.
<^<!m::MsgBox You pressed LeftControl+LeftAlt+m.
【讨论】:
我从密钥历史中得到这个:“A5 138 u 0.11 RAlt”。所以它应该是 RAlt,但是使用 >!s 或 RAlt & s 来发送 ş 不起作用,它只是按 Alt,然后我再次得到菜单的东西:| 提示:确保在使用键盘历史记录之前编写没有 lCtlr 和 lAlt 映射的脚本以查看按 ş 会发生什么 Autohotkey 真的不是最好的开发环境——编辑/重新加载/关闭/测试周期不是那么好。我确实设法使它工作,感谢伟大的职位和 cmets :)以上是关于Windows 在使用罗马尼亚程序员布局输入罗马尼亚字符后发疯,同时使用 Autohotkey 重新映射 Alt/Ctrl/Win的主要内容,如果未能解决你的问题,请参考以下文章