[英]Autohotkey not loading MS Teams
我正在嘗試運行 AHK 腳本以根據應用程序的狀態打開/顯示/最小化團隊。 我目前對 Windows 計算器有相同的功能工作,但是當我復制/粘貼相同的解決方案時,AHK 無法運行團隊。 目前,這就是我正在使用的
F11::
If WinExist("Teams ahk_class ApplicationFrameWindow")
{
IfWinActive
WinMinimize
Else
{
WinGet, winState, MinMax
If (winState = -1)
{
WinRestore
WinActivate
}
}
}
Else
{
run ahk_exe Teams.exe
WinWait, Teams
WinActivate
}
return
但是,似乎第 24 行( run ahk_exe Teams.exe
)導致了問題。 當我運行 windowSpy 時,我得到以下信息:
當我用ahk_pid 6440
替換ahk_exe Teams.exe
,我遇到了同樣的問題。 有沒有其他人遇到過這個問題並找到了解決方法?
我覺得其中一些術語需要澄清一下:
ahk_exe
是進程關聯的可執行文件(即.exe
)的名稱。 通常,僅使用帶有此文件名的run
命令一般不會做任何事情,因為 AHK 不知道此.exe
位於哪個文件夾中。這恰好適用於 Windows 計算器應用程序 [ calc.exe
],因為那是Windows允許您在任何地方運行的程序。 解決方法是告訴ahk
.exe
在哪個文件夾中,以便它可以運行它。
如果要測試run
命令的特定程序參數是否可以正常工作,可以打開命令提示符窗口並嘗試該命令,將 AHK 的run
替換為命令行的start
[例如: run calc.exe
變為start calc.exe
]。
此外, ahk_pid
不是一個持續與程序關聯的常數。 實際上,每次運行程序時,即使是完全相同的程序,Windows 也會每次為其分配一個新的 PID。 此外,因為在程序啟動后分配了一個新的,所以我們不能用它來初始啟動一個程序。
重要提示!:下面的代碼是不安全的,可能會損壞您的 Teams 安裝。 有關更多信息和更好的替代方案,請參閱更新 1。
這是從C:\\Users\\[YOUR USER NAME HERE]\\appdata\\local\\Microsoft\\Teams\\current\\Teams.exe
的默認安裝位置啟動 Teams 應用程序 ( Teams.exe
) 的解決方案
run "%LOCALAPPDATA%\Microsoft\Teams\current\Teams.exe"
希望這是有幫助的。 如果您有任何其他問題,請 lmk
在回顧我原來的解決方案時,我發現直接運行Teams.exe
文件並不是一個好的解決方案,因為它有可能破壞 Microsoft Teams 的安裝(這發生在我身上)。 因此,為了按照開發人員預期的方式運行 Teams,我選擇運行程序的快捷方式文件(即%AppData%\\Microsoft\\Windows\\Start Menu\\Programs\\
的“Microsoft Teams.lnk”文件)文件夾)。 在檢查這個.lnk
文件時,我發現它包含額外的邏輯和對 MS Teams 的Update.exe
文件的調用,有助於防止這些問題的發生。 因此,啟動 MS Teams 的新Run
代碼將是
run "%AppData%\Microsoft\Windows\Start Menu\Programs\Microsoft Teams.lnk"
有了這個,我們現在可以將這個新的run
命令集成回 OP 的程序中。 根據我對原始代碼的理解,這些是 OP 試圖編碼的目標(如果其中任何一個不正確,請 lmk,我可以更新):
所以,我們可以有效地將邏輯歸結為這樣(在偽代碼中):
If Teams is running
If Teams is the Active Window
Minimize Teams
Else (i.e. Teams is NOT the Active Window)
Make Teams the Active Window
Else (i.e. Teams is NOT running)
Run Teams
Wait until Teams is done opening
Make Teams the Active Window
讓我們從檢測 Teams 是否正在運行的代碼開始。 目前,源代碼使用它來嘗試檢測 Teams 是否處於活動狀態: If WinExist("Teams ahk_class ApplicationFrameWindow")
。 忽略此語法是否正確(我從未在 WinExist 的同一個""
塊中看到 WinTitle 和ahk_class
參數),至少在這種情況下,使用 ahk_class 可能不是可用的最佳選擇。 在 OP 提供的Windows Spy
屏幕截圖中,我們可以看到ahk_exe
的Teams.exe
比ahk_class
的Chrome_WidgetWin_1
更具體。 因此,可以使用If WinExist("ahk_exe Teams.exe")
代替此程序來檢測 MS Teams 是否已在運行。
我想談的下一件事是,當 Teams 被“關閉”時,即通過單擊屏幕右上角的X
按鈕或什至使用WinClose
命令關閉時,它的默認行為實際上是將其最小化到托盤,從可以使用WinActivate
命令將其最大化,類似於通過單擊-
按鈕將其最小化到任務欄的情況。 因此,根據個人喜好,您可以讓 Teams 最小化到任務欄或最小化到托盤,並且仍然與程序的其余部分功能相同。 盡管這不是 OP 要求或提及的功能,但我覺得這仍然是在此響應中提及/包含的有用行為。
接下來,原始腳本用於激活非活動但仍在運行的 MS 團隊的原始代碼如下:
Else
{
WinGet, winState, MinMax
If (winState = -1)
{
WinRestore
WinActivate
}
}
雖然 OP 實現的額外檢查和邏輯在某些情況下可能很有用,但我覺得它可以有效地縮短並替換為一個簡單的
Else
WinActivate
我所做的最后一個偏離原始腳本的更改只是運行尚未打開的 Teams 的部分。 我覺得我已經在上面討論了足夠多的更改,但總而言之: run ahk_exe Teams.exe
被替換為run "%AppData%\\Microsoft\\Windows\\Start Menu\\Programs\\Microsoft Teams.lnk"
最終代碼:
F11::
If WinExist("ahk_exe Teams.exe")
{
IfWinActive
WinMinimize ;Use this if you want to minimize Teams to the Taskbar
;WinClose ;Use this if you want to minimize Teams to the Tray
Else
WinActivate
}
Else
{
run "%AppData%\Microsoft\Windows\Start Menu\Programs\Microsoft Teams.lnk"
WinWait, Teams
WinActivate
}
return
這比平時長一點,但我希望這會有所幫助。 再一次,如果您有任何問題/評論/疑慮,或者只是想獲得更多說明,請隨時提出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.