第一个脚本有效,但第二个应该重新映射ctrl + win的脚本没有。那是为什么?
ctrl::Send {ALT down}{SHIFT down}{SHIFT up}{ALT up}
^lwin::Send {ALT down}{SHIFT down}{SHIFT up}{ALT up}
答案 0 :(得分:2)
这对我来说很好用:
Ctrl & LWin:: msgbox hi
我认为当您仍未释放键Alt
和Shift
时,键Ctrl
和Win
会触发,因此它同时处理所有键: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
答案 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
以上两段代码有利有弊。尝试并选择适合您需求的产品。