Autohotkey有时会卡住

时间:2014-05-27 14:27:51

标签: autohotkey skype

史前:

前段时间,Skype已指定 Ctrl + R 热键进行新的通话。无法禁用此设置。

有时候我将浏览器窗口与Skype窗口混淆并打电话给很多人,而不是刷新浏览器窗口(因为专业,我需要经常刷新浏览器窗口)。

所以我制作了一个脚本来防止将 Ctrl + R 热键发送到Skype窗口,它工作正常,但有时我无法发送 Ctrl + R 随处可见,不仅仅是Skype窗口。

代码:

;#NoTrayIcon
$^r::
WinGetClass, class, A

if (class != "TConversationForm")
Send ^r
return

已编译的二进制文件: http://random.net.ua/SkypePreventHotkey.exe

Autohotkey版本: 1.1.14.03

3 个答案:

答案 0 :(得分:4)

我有两项改进:

  1. 尽可能使用#If(...)用于上下文相关的热键。根据我的经验,由于各种原因,#If更可靠。此外,您不必担心不受影响的窗口(例如,通过决定发送什么);事实上,如果#If...条件出现错误,我相信不受影响的Windows会收到原始的本机击键。
  2. AHK_L有一个名为ahk_exe的酷炫窗口选择器,可让您按进程名称识别窗口,而不是类别/标题。相同程序的不同窗口可能具有不同的类名,例如, Windows Media Player处于最小化/最大化模式。可能,Skype也有。这就是为什么对于更复杂的应用程序,通过进程名称识别通常是合理的。
  3. 将这些建议混合到一个解决方案中,我们得到了这段简短的代码:

    ; I hope it's skype.exe ;)
    #IfWinActive ahk_exe skype.exe
    ^r::return
    

    而不是以编程方式说出"如果活动窗口不是Skype,我们发送 CTRL + R " "如果窗口 Skype,我们什么都不做"

答案 1 :(得分:0)

您可以尝试类似

的内容
#InstallKeybdHook
SendMode, Input ; <---typically more reliable than send play mode
~$*^r:: ;<--- ~ means pass command to machine * means fire regardless of other hotkey modifiers.

Send, {Blind}{Ctrl Down}
Send, {R}         
Send, {Ctrl Up}   
return

我使用的是一个名为ACT的程序!对于我的数据库。每当我编写热键时,它就像发送这样的命令而不是你最初的命令(不是错误的)。

如果这不起作用,您可以尝试添加:Sleep,每次发送之间50(产生延迟)以查看是否有效。如果是这样,您可以将每个延迟减少1/2,直到它再次停止工作。

-islanq

答案 2 :(得分:0)

使用Autohotkey的另一种解决方案

#IfWinActive ahk_class tSkMainForm ;Skype
;prevent call
^r::
#IfWinActive