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

时间:2015-05-13 14:58:54

标签: autohotkey skype

Skype HotKeys真的很烦人,因为它们无法从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 keybord creator)。因此,在我的所有应用程序中,我可以用美式键盘快乐地用法语写作,一直使用 AltGr + r 作为我的“è”字符。除了Skype,现在。

阅读上面的链接,我创建了一个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和/或Skype有更多经验的人都可以帮助我吗?

感谢。

2 个答案:

答案 0 :(得分:10)

如果你指定了"不幸的"你可以避免整个问题。热键组合到别的东西。 我做了什么:

  • 转到工具 - >选项 - >高级 - >热键
  • 开启"启用键盘快捷键"
  • ctrl + alt + r 分配给" 在视频通话期间拍摄快照&# 34;

这让我发疯,我在skype论坛上找到了合并的答案。

答案 1 :(得分:1)

请注意这个

#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格式。