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 论坛上找到了综合答案。
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 论坛上找到了综合答案。