sSize:=A_PtrSize=4 ? A_IsUnicode ? 956:508:976
NumPut(VarSetCapacity(NOTIFYICONDATA, sSize, 0), NOTIFYICONDATA, 0)
OnMessage(AHK_NOTIFYICON:=0x401, "WndProc"), WM_LBUTTONUP:=0x202
Global NOTIFYICONDATA, AHK_NOTIFYICON, WM_LBUTTONUP, winId, isUsed, hIcon
#If !isUsed
>^LButton::
isUsed:=True
WinGet, procPath, ProcessPath, % "ahk_id"winId:=WinActive("A")
WinGetTitle, winTitle, % "ahk_id"winId
WinHide, % "ahk_id"winId
hIcon:=DllCall("shell32\ExtractAssociatedIcon"(A_IsUnicode ? "W":"A"), "Ptr", 0
, "Str", procPath
, "UShortP", 0
, "Ptr")
TrayIcon(A_ScriptHwnd, 1, AHK_NOTIFYICON, hIcon, winTitle, 0)
Return
WndProc(wParam, lParam, uMsg, hWnd)
{
If (uMsg=AHK_NOTIFYICON And lParam=WM_LBUTTONUP)
{
WinShow, % "ahk_id"winId
WinActivate, % "ahk_id"winId
TrayIcon(A_ScriptHwnd, 1, AHK_NOTIFYICON)
DllCall("DestroyIcon", "Ptr", hIcon)
winId:=isUsed:=False
}
}
TrayIcon(hWnd, uID, uCbMsg:=0, hIcon:=0, szTip:="", dwMsg:=2)
{
NumPut(hWnd , NOTIFYICONDATA, A_PtrSize=4 ? 4: 8)
NumPut(uID , NOTIFYICONDATA, A_PtrSize=4 ? 8:16)
NumPut(1|2|4 , NOTIFYICONDATA, A_PtrSize=4 ? 12:20)
NumPut(uCbMsg, NOTIFYICONDATA, A_PtrSize=4 ? 16:24)
NumPut(hIcon , NOTIFYICONDATA, A_PtrSize=4 ? 20:32)
StrPut(szTip ,&NOTIFYICONDATA +(A_PtrSize=4 ? 24:40), 141, A_IsUnicode ? "UTF-16":"")
NumPut(3 , NOTIFYICONDATA, A_PtrSize=4 ? A_IsUnicode ? 800:416:816)
DllCall("shell32\Shell_NotifyIcon"(A_IsUnicode ? "W":"A"), "Int", dwMsg
, "Ptr", &NOTIFYICONDATA)
}