RT

解决方案 »

  1.   

    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();
    }
      

  2.   

    楼上强人
    =============
    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();