使用 AutoHotKey 切换 Ctrl 和 Alt 而不会弄乱 Alt-Tab 切换器?

使用 AutoHotKey 切换 Ctrl 和 Alt 而不会弄乱 Alt-Tab 切换器?

我想在 Windows XP 中切换 Ctrl 和 Alt 键。我创建了一个包含以下内容的 AutoHotKey 脚本:

LAlt::LCtrl
RAlt::RCtrl

LCtrl::LAlt
RCtrl::RAlt

这很管用,但唯一的问题是 Alt-Tab 切换器卡住了。当我松开 Alt-Tab 时,窗口切换器会一直保持打开状态,直到我按下另一个键或单击鼠标。

有谁知道如何解决这个问题?

答案1

这对我有用:

; First, swap LAlt and Ctrl
LAlt::Ctrl

; This reverts the Alt+Tab behavior
^Tab::
    Send, {LAlt Down}{Tab}
    ReleaseLAlt(10000)

; The purpose of this function is to release the LAlt key
; Without this, the LAlt key will be stuck
ReleaseLAlt(timeout := "")
{
    startTime := A_Tickcount

    while (isaKeyPhysicallyDown("LAlt"))
    {
        if (timeout && A_Tickcount - startTime >= timeout)
            Send, {LAlt Up} ; Took too long

        sleep, 50
    }

    Send, {LAlt Up}
} 

isaKeyPhysicallyDown(Keys)
{
  if isobject(Keys)
  {
    for Index, Key in Keys
      if getkeystate(Key, "P")
        return key  
  }
  else if getkeystate(Keys, "P")
    return Keys ;keys!
  return 0
}

答案2

我想切换 Alt 和 Ctrl,因为我目前是 Windows 上的 Mac 用户(使用 PC 键盘)。Mac 上的所有热键:Cmd+n、Cmd+w ... -> PC:Ctrl+n、Ctrl+w 和 Cmd 与 Alt 键位于同一位置。

我找到了一个不太完美的解决方案:

将所有字母映射如下:

LAlt & a::Send {LCtrl Down}{a}{LCtrl Up}
...
LAlt & z::Send {LCtrl Down}{z}{LCtrl Up}
LCtrl & a::Send {LAlt Down}{a}{LAlt Up}
...
LCtrl & z::Send {LAlt Down}{z}{LAlt Up}

并且您将保留 Alt+Tab 和 AltGr 功能

这是我的完整实现(不完整):http://www.pastie.org/1660132

答案3

我也在寻找同样的东西,并找到了一些不需要插件或其他程序就可以工作的东西。您可以使用注册表来实现如这里所述

或者,只需创建 2 个 reg 文件。首先是用于将 Ctrl 键切换到 Alt 的文件。

switch_ctrl-to-alt.reg

这会将必要的密钥添加到注册表中。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,1D,00,38,00,38,00,1D,00,00,00,00,00

然后将 Alt 切换回 Ctrl 键的文件。

switch_alt-to-ctrl.reg

这将从注册表中删除必要的密钥。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=-

双击 reg 文件后,需要重新启动,然后就好了。

答案4

如果你是 Mac 用户(或者即使你不是),你也可能思考你想交换 Control 和 Alt,但也许你真正需要的只是交换

Alt-A 到 Alt-Z 以及一些额外的键(箭头、[ 和 ])。

尝试一下,出于测试目的,我只在 Chrome 中激活它。

#IfWinActive ahk_exe chrome.exe
![::Send !{Left}
!]::Send !{Right}
!a::Send ^a
!b::Send ^b
!c::Send ^c
!d::Send ^d
!e::Send ^e
!f::Send ^f
!g::Send ^g
!h::Send ^h
!i::Send ^i
!j::Send ^j
!k::Send ^k
!l::Send ^l
!m::Send ^m
!n::Send ^n
!o::Send ^o
!p::Send ^p
!q::Send ^q
!r::Send ^r
!s::Send ^s
!t::Send ^t
!u::Send ^u
!v::Send ^v
!w::Send ^w
!x::Send ^x
!y::Send ^y
!z::Send ^z

!Right::
Send {End}
return

*!Right:: ; This handles Shift-Right
Send {Blind}{LAlt Up}{End}
return

!Left::
Send {Home}
return

*!Left:: ; This handles Shift-Left
Send {Blind}{Alt Up}{Home}
return

您应该能够在此基础上进行构建。这些是让我最常使用的 Mac 快捷方式。

相关内容