; Uncomment this if MI.ahk is not in your function library:
;#include %A_ScriptDir%\MI.ahk
#NoEnv
; Sample menu items.
Menu, M, Add, 16x16 Icon, ItemClick
Menu, M, Add, 32x32 Icon, ItemClick
Menu, M, Add, 48x48 Icon, ItemClick
; Set item 1's icon to shell32.dll, icon 4, 16x16.
MI_SetMenuItemIcon("M", 1, "shell32.dll", 4, 16)
; Set item 2's icon to shell32.dll, icon 4, 32x32.
MI_SetMenuItemIcon("M", 2, "shell32.dll", 4, 32)
; Windows 2000 or later required (supports sizes other than 16x16 and 32x32):
MI_SetMenuItemIcon("M", 3, "shell32.dll", 4, 48)
; Usually looks better:
MI_SetMenuStyle("M", 0x4000000)
; Note: This menu is shown automatically after setting up the tray menu.
;
; Icons in the Tray menu!
;
; Refer to a menu by handle for efficiency.
hTM := MI_GetMenuHandle("Tray")
if (A_OSVersion != "WIN_VISTA")
{ ; It is necessary to hook the tray icon for owner-drawing to work.
; (Owner-drawing is not used on Windows Vista.)
OnMessage(0x404, "AHK_NOTIFYICON")
OnMessage(0x111, "WM_COMMAND") ; To track "pause" status.
MI_SetMenuStyle(hTM, 0x4000000) ; MNS_CHECKORBMP (optional)
}
SplitPath, A_AhkPath,, SpyPath
SpyPath = %SpyPath%\AU3_Spy.exe
MI_SetMenuItemIcon(hTM, 1, A_AhkPath, 1, 16) ; open
MI_SetMenuItemIcon(hTM, 2, A_WinDir "\hh.exe", 1, 16) ; help
;-
MI_SetMenuItemIcon(hTM, 4, SpyPath, 1, 16) ; spy
; reload - icon needed!
MI_SetMenuItemIcon(hTM, 6, A_AhkPath, 2, 16) ; edit
;-
MI_SetMenuItemIcon(hTM, 8, A_AhkPath, 3, 16) ; suspend
MI_SetMenuItemIcon(hTM, 9, A_AhkPath, 4, 16) ; pause
MI_SetMenuItemBitmap(hTM, 10, 8) ; exit
MI_ShowMenu("M")
return
ItemClick:
return
AHK_NOTIFYICON(wParam, lParam)
{
global hTM, M_IsPaused
if (lParam = 0x205) ; WM_RBUTTONUP
{
; Update "Suspend Script" and "Pause Script" checkmarks.
DllCall("CheckMenuItem","uint",hTM,"uint",65305,"uint",A_IsSuspended ? 8:0)
DllCall("CheckMenuItem","uint",hTM,"uint",65306,"uint",M_IsPaused ? 8:0)
; Show menu to allow owner-drawing.
MI_ShowMenu(hTM)
return 0
}
}
WM_COMMAND(wParam, lParam, Msg, hwnd)
{
Critical
global M_IsPaused
id := wParam & 0xFFFF
if id in 65306,65403 ; tray pause, file menu pause
{
; When the script is not paused, WM_COMMAND() is called once for
; AutoHotkey --** and once for OwnerDrawnMenuMsgWin **--.
DetectHiddenWindows, On
WinGetClass, cl, ahk_id %hwnd%
if cl != AutoHotkey
return
; This will become incorrect if "pause" is used from the script.
M_IsPaused := ! M_IsPaused
}
}