重新映射 ctrl+win

Remapping ctrl+win

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

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

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

因为它们都是修饰键。

试试这个:

Ctrl & LWin::

编辑:
然后,也尝试使用 SetKeyDelay and possibly SendEvent

等等,我发现这个现在可以工作了:

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

当然,作为修饰键,需要特殊对待。

编辑 2:

My shift+alt combination is for changing the keyboard language

你为什么不早说? :) 我以为你只是在替换修饰符组合。

那就简单多了。

这应该有效:

/*
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

以上两段代码各有利弊。试验并选择适合您需要的东西。

这对我来说很好用:

Ctrl & LWin:: msgbox hi

我认为键 AltShift 在您还没有释放键 CtrlWin 时触发,因此它在同时:Alt, Shift, Ctrl, Win.
因为你应该检查当时是否没有按下按键。
为此,我们将使用函数 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