The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何讓 AutoHotkey 的 TrayTip 命令成功顯示訊息在 Windows 10 的通知中心

如果你是 Windows 10,在使用 AutoHotkey 的時候可以透過 TrayTip 來顯示通知訊息, 他預設會顯示在 Windows 的通知中心 (視窗最右下角),不過在預設安裝下,這個功能可能會失效。今天我就來說說這個問題的解法。

An abstract and conceptual image representing Windows 10 notification center issues with AutoHotkey's TrayTip command  The image should feature elemen

使用範例

以下是 TrayTip 的使用範例:

TrayTip #1, This is TrayTip #1
Sleep 3000   ; Let it display for 3 seconds.
HideTrayTip()
TrayTip #2, This is the second notification.
Sleep 3000

; Copy this function into your script to use it.
HideTrayTip() {
    TrayTip  ; Attempt to hide it the normal way.
    if SubStr(A_OSVersion,1,3) = "10." {
        Menu Tray, NoIcon
        Sleep 200  ; It may be necessary to adjust this sleep.
        Menu Tray, Icon
    }
}

成功執行時的通知訊息如下:

AutoHotkey TrayTip on Notification Center

問題說明

基本上 AutoHotkey 在安裝時提供了三個安裝選項:

  1. AutoHotkeyA32.exe:32 位元 ANSI 版本。
  2. AutoHotkeyU32.exe:32 位元 Unicode 版本。
  3. AutoHotkeyU64.exe:64 位元 Unicode 版本。 <-- 預設安裝選項

AutoHotkey

在我的電腦上,我是使用 AutoHotkeyU64 來安裝的,但是當我使用 TrayTip 來顯示通知訊息時,卻沒有任何訊息出現在 Windows 10 的通知中心,也沒有任何錯誤訊息,就是一直收不到通知而已。

不過我有在另一台 VM 測試過,透過 AutoHotkeyU64 的安裝是沒問題的,所以不太清楚問題在哪裡。由於我的電腦已經很久沒有重灌了,所以可能是某種原因造成的。

另外一個可能的原因是,Windows 10 與之後的版本,預設將所有氣球視窗替換為 Toast 通知 (這可以通過群組原則覆蓋)。多次呼叫 TrayTip 通常會導致多個通知被放置在 "佇列" 中,而不是每個通知替換上一次的通知。

而且,TrayTip 如果腳本缺少系統匣圖示 (透過 #NoTrayIconMenu, Tray, NoIcon) 也會失效。

還有一點也會失效,如果存在 HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced 機碼,而且 EnableBalloonTips 這個 REG_DWORD 值設定為 0 的話,TrayTip 也會失效:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced >> EnableBalloonTips

解決方案

我自己的解法是重新安裝 AutoHotkey,但是這次選擇安裝 32-bit 的 Unicode 版本,這樣就可以正常運作了。

  1. 全新安裝

    choco install autohotkey.install --params="'/DefaultVer:U32'"
    
  2. 升級安裝

    choco upgrade autohotkey.install --params="'/DefaultVer:U32'"
    

相關連結

留言評論