 |
AutoHotkey Community Let's help each other out
|
| View previous topic :: View next topic |
| Author |
Message |
Lexikos
Joined: 17 Oct 2006 Posts: 2472 Location: Australia, Qld
|
Posted: Mon Apr 28, 2008 11:20 am Post subject: |
|
|
| ItemClick executes when an item is selected from the example menu. Afaik, every item must have a label, but since the example is only showing off the icons, the label doesn't need to do anything. |
|
| Back to top |
|
 |
Superfraggle
Joined: 02 Nov 2004 Posts: 770 Location: London, UK
|
Posted: Wed Apr 30, 2008 12:48 am Post subject: |
|
|
Hi Lexicos, Great script as always.
I am having some issues with it, probably missed a comment somewhere, but take this example.
| Code: |
; 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
MI_SetMenuItemIcon("M", 1, "shell32.dll", 4, 16)
Menu,Tray,Add,M,:M
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:
Menu, M, Deleteall
Menu, M, Add, 16x16 Icon, ItemClick
MI_SetMenuItemIcon("M", 1, "shell32.dll", 4, 16)
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)
Tooltip,Bleah
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
}
} |
After you click the custom menu for the first time and the deleteall is performed the tray menu will no longer open.
This is XP of course otherwise I wouldnt need the mi_showmenu. _________________ Steve F AKA Superfraggle
http://r.yuwie.com/superfraggle |
|
| Back to top |
|
 |
Lexikos
Joined: 17 Oct 2006 Posts: 2472 Location: Australia, Qld
|
Posted: Wed Apr 30, 2008 8:46 am Post subject: |
|
|
It appears AutoHotkey recreates the tray menu when you delete M, so hTM is no longer valid. You also need to reset the tray menu icons. Try this:
| Code: | ; 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
MI_SetMenuItemIcon("M", 1, "shell32.dll", 4, 16)
Menu,Tray,Add,M,:M
gosub SetTrayMenuIcons
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.
}
SplitPath, A_AhkPath,, SpyPath
SpyPath = %SpyPath%\AU3_Spy.exe
MI_ShowMenu("M")
return
ItemClick:
Menu, M, Deleteall
Menu, M, Add, 16x16 Icon, ItemClick
MI_SetMenuItemIcon("M", 1, "shell32.dll", 4, 16)
; ALSO SET TRAY MENU ICONS:
SetTrayMenuIcons:
hTM := MI_GetMenuHandle("Tray")
if A_OSVersion != WIN_VISTA
MI_SetMenuStyle(hTM, 0x4000000) ; MNS_CHECKORBMP (optional)
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
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)
Tooltip,Bleah
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
}
} |
|
|
| Back to top |
|
 |
|
|
You can post new topics in this forum You can reply to topics in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|