在使用Autohotkey重新映射Alt / Ctrl / Win后,使用罗马尼亚程序员布局键入罗马尼亚字符后,Windows变得疯狂

时间:2013-09-04 22:35:26

标签: windows keyboard autohotkey

我使用Autohotkey重新映射了一些键,如下所示:

LWin::LAlt

LCtrl::LWin

LAlt::LCtrl

我正在使用带有罗马尼亚语(程序员)键盘布局的Windows 7。例如,如果我想输入ă,我会点击RAlt + 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 Down}{Shift Down}u0103{Control Up}{Shift Up}
    >!+a::SendInput {Control Down}{Shift Down}u0102{Control Up}{Shift Up}
    >!q::SendInput {Control Down}{Shift Down}u00E2{Control Up}{Shift Up}
    >!+q::SendInput {Control Down}{Shift Down}u00C2{Control Up}{Shift Up}
    >!i::SendInput {Control Down}{Shift Down}u00EE{Control Up}{Shift Up}
    >!+i::SendInput {Control Down}{Shift Down}u00CE{Control Up}{Shift Up}
    >!s::SendInput {Control Down}{Shift Down}u0219{Control Up}{Shift Up}
    >!+s::SendInput {Control Down}{Shift Down}u0218{Control Up}{Shift Up}
    >!t::SendInput {Control Down}{Shift Down}u021B{Control Up}{Shift Up}
    >!+t::SendInput {Control Down}{Shift Down}u021A{Control Up}{Shift 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 个答案:

答案 0 :(得分: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帮助文件热键页面中的示例:

<^>!m::MsgBox You pressed AltGr+m.
<^<!m::MsgBox You pressed LeftControl+LeftAlt+m.