[python-win32] Simple context-menu question.

Mike Driscoll mdriscoll at co.marshall.ia.us
Tue Nov 25 19:05:19 CET 2008


Tim Roberts wrote:
> Joel Bryan Juliano wrote:
>   
>> Based on the context_menu.py example found in
>> win32comext\shell\demos\servers\context_menu.py, there is a function
>> callback when an item is chosen,
>>
>> def InvokeCommand(self, ci):
>>         mask, hwnd, verb, params, dir, nShow, hotkey, hicon = ci
>>         win32gui.MessageBox(hwnd, "Hello", "Wow", win32con.MB_OK)
>>
>> My question is how can I get the current names of the "MenuName >
>> SubMenuName > SubItemName" when InvokeCommand is called? I apologize
>> if this may sound like a dumb question, I'm really new to win32/COM
>> programming.. My approach is when I get the names, I can easily call a
>> function for them, since the subitems are dynamic and always changing.
>>   
>>     
>
> You can't get the names.  What you get is the menu identifier (idCmd in
> the sample) of the item that was clicked, as the "verb" -- the 3rd
> member of the tuple you get in InvokeCommand.  It's up to you to assign
> a meaning to that identifier.  The Win32 menu handling doesn't track the
> menu "tree".  The tree is only meaningful for display.  It only notifies
> you that a menu item was clicked.
>
> I would also caution you that it is not good practice to create deeply
> nested context menus.  It makes for a very confusing user experience.
>
>   

And if you "really" need to know the names in the menus then you should 
just design your own using a Python GUI toolkit, like Tkinter or wxPython.

Mike



More information about the python-win32 mailing list