AutoHotKey:如何禁用 Skype 热键并使您的键盘正常运行

AutoHotKey: How to disable a Skype hotkey and make your keyboard behave normally

Skype 热键真的很烦人,因为它们无法从 Skype 本身禁用。最烦人的是 Ctrl+R,如果它被选中,它会与您的任何联系人开始 Skype 通话。最近已被 Ctrl+Alt+R 取代。

http://community.skype.com/t5/Windows-desktop-client/Disable-CTRL-R-on-windows/td-p/2877763

不幸的是,我碰巧得到 AltGr+R 作为“è”字符的映射键(使用 Microsoft键盘创建者)。因此,在我所有的应用程序中,我可以使用美式键盘愉快地用法语书写,始终使用 AltGr+r 作为我的“è”字符.除了 Skype,现在。

阅读上面的 link,我创建了一个 AutoKey 脚本来禁用 Skype 的热键:

#IfWinActive, ahk_exe Skype.exe ; utilizes this script for Skype only
!^r:: ; replace [ctrl][alt][r] with nothing
#If     ; closes IfWinActive condition, needed if more code comes after this

但是,虽然这会禁用 Skype 热键,但它会阻止我在 Skype 讨论中正常输入“è”字符。非常好,但不是最好的,因为我现在在 Skype 中打字都被打乱了。

我试过其他选择,但无济于事:

#IfWinActive, ahk_exe Skype.exe ; utilizes this script for Skype only
!^r:: 
Send è  
return
#If     ; closes IfWinActive condition, needed if more code comes after this

#IfWinActive, ahk_exe Skype.exe ; utilizes this script for Skype only
!^r:: 
SendInput {Raw}è  
return
#If     ; closes IfWinActive condition, needed if more code comes after this

但是只要 !^r 没有被严格禁用,它就会发起 Skype 通话。

任何有更多 AutoHotKey 经验的人 and/or Skype 可以帮助我?

谢谢。

请注意这

#IfWinActive, ...
!^r::
#If

不是有效的热键停用:附加 return 关键字,所以它是 !^r::return。否则,在按下 alt ctrl r 后,下面的任何代码也将被执行。

此外,如果您只想重新映射 AltGr 热键,您应该使用 <^>!r:: 作为触发器,如 documentation 中所建议的那样。这样,将保留自然的 alt+ctrl+r 行为,在这种情况下进行调用。


我无法完全重现您的问题。

#IfWinActive, ahk_exe Skype.exe
<^>!r::
send a
return 
#ifWinActive

对我来说非常好,不会给我在 Skype 中的活跃联系人打电话。 AltGr 被正确覆盖。 但是 如果我将 send a 更改为 send è,脚本就会开始异常运行。它只适用于第一次:之后,我必须手动按一次 Alt 才能再次发送 è。这对我来说像是一个错误。

解决方法可能是

#IfWinActive, ahk_exe Skype.exe
<^>!r::
send è
keywait, alt
send {alt}
return 
#ifWinActive

#IfWinActive, ahk_exe Skype.exe
<^>!r::
keywait, alt
send è
return 
#ifWinActive

。但这仍然无法在按住 altGr 的同时发送多个 è。您必须在每个 è.

后释放 AltGr

编辑 - 我找到了 100% 可行的解决方案:

#IfWinActive, ahk_exe Skype.exe
<^>!r::
SendUnicodeChar(0x00E8)
return 
#ifWinActive

; SOURCE for the following: http://www.autohotkey.com/board/topic/16404-inserting-unicode-special-characters/
SendUnicodeChar(charCode)
{
    VarSetCapacity(ki, 28 * 2, 0)
    EncodeInteger(&ki + 0, 1)
    EncodeInteger(&ki + 6, charCode)
    EncodeInteger(&ki + 8, 4)
    EncodeInteger(&ki +28, 1)
    EncodeInteger(&ki +34, charCode)
    EncodeInteger(&ki +36, 4|2)

    DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28)
}

EncodeInteger(ref, val)
{
    DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val)
}

这与上面相同,但不是使用 send èsend {ASC 0232},而是使用 unicode 格式。

如果将 "unfortunate" 热键组合分配给其他东西,则可以避免整个问题。 我做了什么:

  • 转到工具->选项->高级->热键
  • 开启"Enable keyboard shortcuts"
  • ctrl + alt + r 分配给“Take a视频通话期间的快照"

快把我逼疯了,我在 Skype 论坛上找到了综合答案。