Thanks for reply Tim.
I had decided not to use the command ID technique until I got things
working, so TPM_RETURNCMD was commented out when I defines flags. From
my understanding of MSDN and pywin32, this should make commands
immediately execute and cause TrackPopupMenu to return an HRESULT?
Also forgot to mention, using python3.2 32bit, pywon32 build 217 on
windows 7
I've simplified/condensed it a bit, stripped comments and changed
TrackPopupMenu return variable to something more appropriate.
Chris.
DesktopFolder = shell.SHGetDesktopFolder()
if not DesktopFolder:
raise Exception("Failed to get Desktop folder.")
FilePath = 'J:\\'
FileName = 'tree.xml'
Eaten, ParentPidl, attr = DesktopFolder.ParseDisplayName(Handle, None,
FilePath)
ParentFolder = DesktopFolder.BindToObject(ParentPidl, None,
shell.IID_IShellFolder)
CM_plus = None
Eaten, Pidl, attr = ParentFolder.ParseDisplayName(Handle, None, FileName)
i, CM = ParentFolder.GetUIObjectOf(Handle, [Pidl], shell.IID_IContextMenu,
0)
hMenu = win32gui.CreatePopupMenu()
Flags = CMF_EXPLORE
CM.QueryContextMenu(hMenu, 0, 1, 0x7FFF, Flags)
x, y = win32gui.GetCursorPos()
flags = win32gui.TPM_LEFTALIGN
hr = win32gui.TrackPopupMenu(hMenu, flags, x, y, 0, Handle, None)
if hr != 1:
e = win32api.GetLastError()
s = win32api.FormatMessage(e) #<-------- "command completed
successfully"
On 02/03/2012 18:42, Tim Roberts wrote:
Chris Ness wrote:
disclaimer: I have only the faintest idea what I'm doing!
I'm trying to get a windows explorer context menu in my app. I can get
the menu to show, but it does not execute any commands (e.g. 'copy')
Right, because you haven't told it to. You implemented the stuff form
the articles pretty closely until the call to TrackPopupMenu, then you
went awry. TrackPopupMenu does not actually return a boolean. It
returns 0 if the call fails, but if the call succeeds, it returns the
command ID of the menu item that was selected, and you have to tell the
shell to go invoke that command.
So, if it returns a value other than 0, you need to create a
CMINVOKECOMMANDINFO structure, fill it in, and pass it to
CM.InvokeCommand. That will trigger the real action.
_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32