【发布时间】:2020-02-19 04:49:06
【问题描述】:
我正在做一些可以拉出上下文菜单的东西。我希望能够关闭应用程序,同时保留“属性”等打开的内容。发生的情况是,如果您打开上下文菜单,选择“属性”,它会打开属性对话框并很好地关闭上下文菜单。但是当我关闭我的应用程序时,属性窗口也会关闭。
问题是:如何保持窗口打开?如果你不能,应用程序如何判断它是否有一个依赖于它打开的窗口/对话框? EnumWindows 不显示它; Spy++ 显示属性对话框也独立存在(在桌面下)。
CComPtr<IContextMenu> pMenu;
CComPtr<IShellFolder> pFolder;
PCUITEMID_CHILD pidl = NULL;
SHBindToParent(item.pidl, IID_IShellFolder, (void**)&pFolder, &pidl);
pFolder->GetUIObjectOf(NULL, 1, &pidl, IID_IContextMenu, NULL, (void**)&pMenu);
UINT flags = CMF_NORMAL | CMF_CANRENAME;
pMenu->QueryContextMenu(menu, CID_FIRST, CID_LAST, 0x7fff, flags);
.
.
.
// command invocation
CMINVOKECOMMANDINFOEX info;
memset(&info, 0, sizeof(info));
info.cbSize = sizeof(info);
info.fMask = CMIC_MASK_NOASYNC | CMIC_MASK_PTINVOKE; // I've played around with flags
info.hwnd = toolbar.m_hWnd; // I've played around with this value
info.lpVerb = MAKEINTRESOURCEA(cid - CID_LAST);
info.nShow = SW_SHOWNORMAL;
info.ptInvoke = point;
pMenu->InvokeCommand((CMINVOKECOMMANDINFO*)&info);
TIA!!
【问题讨论】:
-
shell 属性对话框在进程中运行,因此会在进程退出时关闭。将动词设置为
L"properties"时使用ShellExecuteEx()可能会起作用。