从 windows 托盘打开程序
open program from windows Tray
我制作了一个脚本,可以简单地打开或激活特定的应用程序。
它运行良好,但我有一个问题,当应用程序最小化到 windows 托盘时。
热键激活 Else 语句部分,因此它会创建同一应用程序的另一个实例。
!a::
If WinExist("ahk_exe Orzeszek Timer.exe")
{
WinActivate, ahk_exe Orzeszek Timer.exe
}
Else {
Run, "D:\Portable\PortableApps\Orzeszek Timer\Orzeszek Timer.exe"
}
Return
我需要有关脚本的帮助以触发 IF 语句部分,以防应用出现在系统托盘中。
非常感谢)
试试这个
!a::
Process, Exist, Orzeszek Timer.exe
If (Errorlevel != 0) ; is running
{
WinGet, WinState, MinMax, ahk_exe Orzeszek Timer.exe
If (WinState = "") ; is minimized to tray
SendInput, #bo{Enter} ; Win+b activates the tray, o marks the icon of Orzeszek Timer
else
WinActivate, ahk_exe Orzeszek Timer.exe
}
else ; is NOT running
Run, "D:\Portable\PortableApps\Orzeszek Timer\Orzeszek Timer.exe"
return
如果程序有自己的热键来恢复 window,请使用该热键而不是 #bo{Enter}。
编辑:
如果SendInput, #bo{Enter}
恢复程序太快,在发送键之间加一个sleep:
...
If (WinState = "") ; is minimized to tray
{
SendInput, #b ; Win+b activates the tray
; WinWaitActive, ahk_class Shell_TrayWnd
Sleep, 300
SendInput, o ; o marks the icon of Orzeszek Timer. Try first of all manually which letter marks the icon
Sleep, 300
SendInput, {Enter}
}
...
编辑 2:
我下载了那个小型便携式应用程序,它可以在我的系统上运行:
!a::
Process, Exist, Orzeszek Timer.exe
If (Errorlevel != 0) ; is running
{
WinGet, WinState, MinMax, ahk_exe Orzeszek Timer.exe
If (WinState = "") ; is minimized to tray
; SendInput, #bot{Enter} ; OR:
SendInput, #b{Enter}{Up}ot{Enter}
}
else ; is NOT running
Run, "D:\Portable\PortableApps\Orzeszek Timer\Orzeszek Timer.exe"
WinWait, Orzeszek Timer,, 10
If (!ErrorLevel)
{
WinActivate, Orzeszek Timer
WinWaitActive Orzeszek Timer,, 5
If (!ErrorLevel)
MouseMove, 150, 80, 0
}
return
编辑 3:
如果您没有启用设置中的选项 "Always show all icons in the notification area",请尝试替换
SendInput, #bot{Enter}
和
SendInput, #b{Enter}{Up}ot{Enter}
user3419297 非常感谢您的脚本,它运行良好。我修改了一点点打开应用程序。
!a::
Process, Exist, Orzeszek Timer.exe
If (Errorlevel != 0) ; is running
{
WinGet, WinState, MinMax, ahk_exe Orzeszek Timer.exe
If (WinState = "") {
SendInput, #bo{Right}{Enter}
Sleep, 500
CoordMode, Mouse, Window
MouseMove, 150, 80, 0
}
else
WinActivate, ahk_exe Orzeszek Timer.exe
}
else ; is NOT running
Run, "D:\Portable\PortableApps\Orzeszek Timer\Orzeszek Timer.exe"
return
脚本依赖于应用程序只有一个小缺点放在第一位
在 windows 托盘列表中。
当然,我总是可以重新定义 {Right x} 位置,但是有没有更有效的方法来自动在托盘中找到应用程序位置?
终于成功了!脚本中唯一缺少的部分是编辑 3 中指出的 {Up} 键,以便系统托盘变得可搜索。所以现在我可以毫无问题地找到确切的密钥。在我的例子中是
SendInput, #b{Enter}{Up}tt
Sleep, 100
SendInput, {Enter}
真不知道该怎么感谢你。你帮了我很多)
我制作了一个脚本,可以简单地打开或激活特定的应用程序。
它运行良好,但我有一个问题,当应用程序最小化到 windows 托盘时。
热键激活 Else 语句部分,因此它会创建同一应用程序的另一个实例。
!a::
If WinExist("ahk_exe Orzeszek Timer.exe")
{
WinActivate, ahk_exe Orzeszek Timer.exe
}
Else {
Run, "D:\Portable\PortableApps\Orzeszek Timer\Orzeszek Timer.exe"
}
Return
我需要有关脚本的帮助以触发 IF 语句部分,以防应用出现在系统托盘中。
非常感谢)
试试这个
!a::
Process, Exist, Orzeszek Timer.exe
If (Errorlevel != 0) ; is running
{
WinGet, WinState, MinMax, ahk_exe Orzeszek Timer.exe
If (WinState = "") ; is minimized to tray
SendInput, #bo{Enter} ; Win+b activates the tray, o marks the icon of Orzeszek Timer
else
WinActivate, ahk_exe Orzeszek Timer.exe
}
else ; is NOT running
Run, "D:\Portable\PortableApps\Orzeszek Timer\Orzeszek Timer.exe"
return
如果程序有自己的热键来恢复 window,请使用该热键而不是 #bo{Enter}。
编辑:
如果SendInput, #bo{Enter}
恢复程序太快,在发送键之间加一个sleep:
...
If (WinState = "") ; is minimized to tray
{
SendInput, #b ; Win+b activates the tray
; WinWaitActive, ahk_class Shell_TrayWnd
Sleep, 300
SendInput, o ; o marks the icon of Orzeszek Timer. Try first of all manually which letter marks the icon
Sleep, 300
SendInput, {Enter}
}
...
编辑 2:
我下载了那个小型便携式应用程序,它可以在我的系统上运行:
!a::
Process, Exist, Orzeszek Timer.exe
If (Errorlevel != 0) ; is running
{
WinGet, WinState, MinMax, ahk_exe Orzeszek Timer.exe
If (WinState = "") ; is minimized to tray
; SendInput, #bot{Enter} ; OR:
SendInput, #b{Enter}{Up}ot{Enter}
}
else ; is NOT running
Run, "D:\Portable\PortableApps\Orzeszek Timer\Orzeszek Timer.exe"
WinWait, Orzeszek Timer,, 10
If (!ErrorLevel)
{
WinActivate, Orzeszek Timer
WinWaitActive Orzeszek Timer,, 5
If (!ErrorLevel)
MouseMove, 150, 80, 0
}
return
编辑 3:
如果您没有启用设置中的选项 "Always show all icons in the notification area",请尝试替换
SendInput, #bot{Enter}
和
SendInput, #b{Enter}{Up}ot{Enter}
user3419297 非常感谢您的脚本,它运行良好。我修改了一点点打开应用程序。
!a::
Process, Exist, Orzeszek Timer.exe
If (Errorlevel != 0) ; is running
{
WinGet, WinState, MinMax, ahk_exe Orzeszek Timer.exe
If (WinState = "") {
SendInput, #bo{Right}{Enter}
Sleep, 500
CoordMode, Mouse, Window
MouseMove, 150, 80, 0
}
else
WinActivate, ahk_exe Orzeszek Timer.exe
}
else ; is NOT running
Run, "D:\Portable\PortableApps\Orzeszek Timer\Orzeszek Timer.exe"
return
脚本依赖于应用程序只有一个小缺点放在第一位
在 windows 托盘列表中。
当然,我总是可以重新定义 {Right x} 位置,但是有没有更有效的方法来自动在托盘中找到应用程序位置?
终于成功了!脚本中唯一缺少的部分是编辑 3 中指出的 {Up} 键,以便系统托盘变得可搜索。所以现在我可以毫无问题地找到确切的密钥。在我的例子中是
SendInput, #b{Enter}{Up}tt
Sleep, 100
SendInput, {Enter}
真不知道该怎么感谢你。你帮了我很多)