簡體   English   中英

Autohotkey 未加載 MS Teams

[英]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



更新 1:

在回顧我原來的解決方案時,我發現直接運行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,我可以更新):

  1. 如果 Teams 正在運行並且當前處於活動窗口,請將其最小化。
  2. 如果 Teams 正在運行,但不是活動窗口,請將其設為活動窗口
  3. 如果 Teams 未運行,請運行它並在打開后將其設為活動窗口。

所以,我們可以有效地將邏輯歸結為這樣(在偽代碼中):

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_exeTeams.exeahk_classChrome_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM