100分求打开回收站右键菜单和回收站属性的代码
RT
[解决办法]
SHGetDesktopFolder取回收站对象,然后用IShellFolder::GetUIObjectOf取右键菜单对象。
接着执行还是弹出就看你的了。
下面是打开回收站属性的示例代码
void ShowRecycleBinShellProperties()
{
HRESULT hr;
// Call this if needed.
::CoInitialize( NULL );
IShellFolder* pDesktopFolder = NULL;
IMalloc* pMalloc = NULL;
hr = ::SHGetMalloc(&pMalloc);
// Get desktop folder.
hr = ::SHGetDesktopFolder(&pDesktopFolder);
// Get the history folder.
ITEMIDLIST* pidlRecycleBin = NULL;
hr = ::SHGetSpecialFolderLocation(NULL, CSIDL_BITBUCKET, &pidlRecycleBin);
{
IContextMenu* pContextMenu = NULL;
const ITEMIDLIST* pidl2 = pidlRecycleBin;
hr = pDesktopFolder-> GetUIObjectOf(NULL, 1, &pidl2, IID_IContextMenu, NULL, (void**)&pContextMenu);
if (SUCCEEDED(hr))
{
CMINVOKECOMMANDINFO pCommandInfo = { 0 };
pCommandInfo.cbSize = sizeof(CMINVOKECOMMANDINFO);
pCommandInfo.lpVerb = _T( "properties ");
pCommandInfo.fMask = CMIC_MASK_FLAG_NO_UI; // has no effect
hr = pContextMenu-> InvokeCommand(&pCommandInfo);
}
pContextMenu-> Release();
}
// Get the IShellFolder of the history folder.
IShellFolder* pRecycleBinFolder = NULL;
hr = pDesktopFolder-> BindToObject(pidlRecycleBin, NULL, IID_IShellFolder, (void**)&pRecycleBinFolder);
pRecycleBinFolder-> Release();
pMalloc-> Release();
pDesktopFolder-> Release();
}
[解决办法]
楼上强人
=============
void ShowRecycleBinShellProperties()
{
HRESULT hr;
// Call this if needed.
::CoInitialize( NULL );
IShellFolder* pDesktopFolder = NULL;
IMalloc* pMalloc = NULL;
hr = ::SHGetMalloc(&pMalloc);
// Get desktop folder.
hr = ::SHGetDesktopFolder(&pDesktopFolder);
// Get the history folder.
ITEMIDLIST* pidlRecycleBin = NULL;
hr = ::SHGetSpecialFolderLocation(NULL, CSIDL_BITBUCKET, &pidlRecycleBin);
{
IContextMenu* pContextMenu = NULL;
const ITEMIDLIST* pidl2 = pidlRecycleBin;
hr = pDesktopFolder-> GetUIObjectOf(NULL, 1, &pidl2, IID_IContextMenu, NULL, (void**)&pContextMenu);
if (SUCCEEDED(hr))
{
CMINVOKECOMMANDINFO pCommandInfo = { 0 };
pCommandInfo.cbSize = sizeof(CMINVOKECOMMANDINFO);
pCommandInfo.lpVerb = _T( "properties ");
pCommandInfo.fMask = CMIC_MASK_FLAG_NO_UI; // has no effect
hr = pContextMenu-> InvokeCommand(&pCommandInfo);
}
pContextMenu-> Release();
}
// Get the IShellFolder of the history folder.
IShellFolder* pRecycleBinFolder = NULL;
hr = pDesktopFolder-> BindToObject(pidlRecycleBin, NULL, IID_IShellFolder, (void**)&pRecycleBinFolder);
pRecycleBinFolder-> Release();
pMalloc-> Release();
pDesktopFolder-> Release();
}
=======================
右键菜单
以单文档程序为例
一、添加菜单资源 IDR_POPMENU,在资源编辑器中编辑菜单第一列,并且为每个菜单项添加处理函数。
二、在 CView 派生类中添加 WM_RBUTTONDOWN 消息处理函数,添加代码:
CMenu menu;
menu.LoadMenu( IDR_POPMENU );
CMenu *pPopupMenu = menu.GetSubMenu( 0 );
ClientToScreen( &point );
pPopupMenu -> TrackPopupMenu( TPM_RIGHTBUTTON, point.x, point.y, this );
pPopupMenu -> DestroyMenu();