重新映射ctrl + win

时间:2018-05-01 07:33:12

标签: autohotkey

第一个脚本有效,但第二个应该重新映射ctrl + win的脚本没有。那是为什么?

  1. ctrl::Send {ALT down}{SHIFT down}{SHIFT up}{ALT up}

  2. ^lwin::Send {ALT down}{SHIFT down}{SHIFT up}{ALT up}

2 个答案:

答案 0 :(得分:2)

这对我来说很好用:

Ctrl & LWin:: msgbox hi

我认为当您仍未释放键AltShift时,键CtrlWin会触发,因此它同时处理所有键:AltShiftCtrlWin 因为你应该检查当时是否没有按下按键 为此,我们将使用函数GetKeyState()

Ctrl & LWin Up::
    while(!GetKeyState("Ctrl", "P"))
        continue
    send {ALT down}{SHIFT down}
    sleep 40
    send {SHIFT up}{ALT up}
    ; or use “Send {ALT down}{SHIFT down}{SHIFT up}{ALT up}”
    ; if it works for you
return

答案 1 :(得分:1)

因为它们都是修饰键。

请改为尝试:

Ctrl & LWin::

修改
然后,尝试使用SetKeyDelay,也可以使用SendEvent

等等,我发现这项工作刚刚开始:

Ctrl & LWin::Send {ALT down}{SHIFT down}
Ctrl & LWin Up::Send {SHIFT up}{ALT up}

当然,作为修饰键,它们需要特殊处理。

编辑2

  

我的shift + alt组合用于更改键盘语言

为什么你之前没有这么说? :)我以为你只是替换修饰符组合。

那么它就简单得多了。

这应该有效:

/*
cf. https://www.autohotkey.com/docs/commands/PostMessage.htm
cf. https://msdn.microsoft.com/en-us/library/windows/desktop/ms632630(v=vs.85).aspx

0x50: WM_INPUTLANGCHANGEREQUEST
0x02: INPUTLANGCHANGE_FORWARD
*/
Ctrl & LWin::PostMessage, 0x50, 2,,, A

可替换地:

Ctrl & LWin::
    KeyWait Ctrl
    KeyWait LWin
    PostMessage, 0x50, 2,,, A
Return

以上两段代码有利有弊。尝试并选择适合您需求的产品。