如何在逻辑语句中释放AutoHotkey控件?

时间:2018-01-30 15:50:43

标签: autohotkey

目标: 使用热键' C'模仿新电子邮件窗口'在Outlook中,类似于Gmail。

尝试:

c::
SetTitleMatchMode, 2
    If Not WinActive("Message")
        Send, ^n
return

问题: 这个脚本确实有效,但是在那个“新电子邮件”中。窗口' c' char被锁定,我在打字时无法使用它。

尝试过的解决方案: 我尝试添加并清空其他{}'但这似乎不起作用。想法?

环境: Windows 10 / Outlook 2016 +

4 个答案:

答案 0 :(得分:0)

这可能是你想要的,

SetTitleMatchMode,2
#if WinActive("Microsoft Outlook")
{
c::
   Send, ^n

   return
}

这样,它允许在任何地方键入char'c',包括新的电子邮件窗口。但是,如果您在Outlook主窗口中,则会触发它,为您打开一个新的电子邮件窗口。

答案 1 :(得分:0)

"Microsoft Outlook"位于窗口标题中时,使用上下文相关标题匹配 C 映射到 CTRL + N

SetTitleMatchMode 2     ; All #If statements match anywhere in title
#IfWinActive Microsoft Outlook
  c::^n
#IfWinActiv

答案 2 :(得分:0)

这很有用。我认为在我的情况下,如果窗口不活动,它需要具体知道要做什么,而在我的情况下,它是要触发常规的'c',我会认为逻辑是默认识别的。

c::
SetTitleMatchMode 2
    IfWinActive, Outlook
        Send, ^n
    Else
        send, c
return 

答案 3 :(得分:0)

$c::
  If (WinActive("Microsoft Outlook") { ;may/may not be "Microsoft Outlook' use window spy to find out more
    send ^N ; if you got that to work then dont mess with this part
  } else {
    send {c}
  }
Return

基本上,这会检查Outlook是否处于活动状态,然后发送^N,如果不是,它将发送字符C。

但这并不是最好的主意:创建用于键入...的单键热键。
更好的主意:将热键(“ ::`之前的部分”)更改为$ ^!c ($是使发送c的任何其他热键都不会激活该键)

  

另一个方法是:

$~c::
  If (WinActive(ahk_class "outlook.exe") { ; or something along the lines of that...
    sleep 250
    send ^N
  }
Return

除了可以更好地保留c键的功能外,大多数情况下它都执行相同的操作,但是它可能会导致键入Outlook的问题,因此再次出现,

  

请考虑使用非键入单键热键,例如Rcontrol。热键中的〜表示不要撤消原始键功能。添加睡眠以确保在使用热键时不会将保留的c字符添加到新电子邮件中。

希望这会有所帮助(我相当确定这是可行的)我不使用Outlook,所以我不知道Outlook对这种事情的反应如何,也没有测试过,但是我知道我的AHK基础知识并确实对函数语法进行了双重检查,这对您很幸运,请阅读我的代码,因为它们对于这些代码段功能至关重要。

如果两个代码段均无法满足您的需求,则可能要添加&& If (Not WinActive("Message")) ;or whatwver the message window is called,因为您的新消息窗口也称为Outlook,所以这会干扰键入。 / p>