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有更多经验的人都可以帮助我吗?
感谢。
答案 0 :(得分:10)
如果你指定了"不幸的"你可以避免整个问题。热键组合到别的东西。 我做了什么:
这让我发疯,我在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格式。