4

我使用 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]

4

1 回答 1

2

如果您的右 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}

如果您的键盘驱动程序在内部发送“LControl & RAlt”,则此重新映射可能仍会杀死您的 Alt-Gr 键。

您可以解决此问题,为 Alt-Gr 创建一个特殊的热键,或者 - 如果罗马尼亚语键盘只有几个 Alt-Gr 组合,则将它们定义为热键。

Autohotkey 帮助文件Hotkey页面中的示例:

<^>!m::MsgBox You pressed AltGr+m.
<^<!m::MsgBox You pressed LeftControl+LeftAlt+m.
于 2013-09-05T05:09:59.177 回答