如何在逻辑语句中释放 AutoHotkey 控件?
How to Release AutoHotkey Control in a Logic Statement?
目标:
在 Outlook 中使用热键 'C' 模仿 'New Email Window',类似于 Gmail。
尝试:
c::
SetTitleMatchMode, 2
If Not WinActive("Message")
Send, ^n
return
问题:
这个脚本确实有效,但是 'New Email' Window 里面的 'c' 字符被锁定了,我不能在打字时使用它。
尝试过的解决方案:
我尝试添加并清空 'else {}' 但这似乎不起作用。想法?
环境:
Windows 10 / 展望 2016+
这可能就是你想要的,
SetTitleMatchMode,2
#if WinActive("Microsoft Outlook")
{
c::
Send, ^n
return
}
这样,就可以在任何地方输入字符 'c',包括新电子邮件 window。但是,如果您在主 Outlook window 中为您打开一封新电子邮件 window,它将触发。
这使用context-sensitive标题匹配将C映射到CTRL+N当 "Microsoft Outlook"
在 window 标题中时:
SetTitleMatchMode 2 ; All #If statements match anywhere in title
#IfWinActive Microsoft Outlook
c::^n
#IfWinActiv
这成功了。我认为在我的例子中它需要明确知道如果 window 不活跃该怎么做,而在我的例子中它是触发一个常规的 'c',我本以为逻辑是由默认识别。
c::
SetTitleMatchMode 2
IfWinActive, Outlook
Send, ^n
Else
send, c
return
$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
添加此内容,因为您的新消息 window 也可能称为 outlook,因此这将干扰打字。
目标: 在 Outlook 中使用热键 'C' 模仿 'New Email Window',类似于 Gmail。
尝试:
c::
SetTitleMatchMode, 2
If Not WinActive("Message")
Send, ^n
return
问题: 这个脚本确实有效,但是 'New Email' Window 里面的 'c' 字符被锁定了,我不能在打字时使用它。
尝试过的解决方案: 我尝试添加并清空 'else {}' 但这似乎不起作用。想法?
环境: Windows 10 / 展望 2016+
这可能就是你想要的,
SetTitleMatchMode,2
#if WinActive("Microsoft Outlook")
{
c::
Send, ^n
return
}
这样,就可以在任何地方输入字符 'c',包括新电子邮件 window。但是,如果您在主 Outlook window 中为您打开一封新电子邮件 window,它将触发。
这使用context-sensitive标题匹配将C映射到CTRL+N当 "Microsoft Outlook"
在 window 标题中时:
SetTitleMatchMode 2 ; All #If statements match anywhere in title
#IfWinActive Microsoft Outlook
c::^n
#IfWinActiv
这成功了。我认为在我的例子中它需要明确知道如果 window 不活跃该怎么做,而在我的例子中它是触发一个常规的 'c',我本以为逻辑是由默认识别。
c::
SetTitleMatchMode 2
IfWinActive, Outlook
Send, ^n
Else
send, c
return
$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
添加此内容,因为您的新消息 window 也可能称为 outlook,因此这将干扰打字。