blog

枪手亨利

博客园 首页 新随笔 联系 订阅 管理

//   Error   checking   minimized   for   clarity.  
  void   DeleteUrlFromHistoryShell()  
  {  
  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*   pidlHistoryFolder   =   NULL;  
  hr   =   ::SHGetSpecialFolderLocation(NULL,   CSIDL_HISTORY,   &pidlHistoryFolder);  
   
  //   Get   the   IShellFolder   of   the   history   folder.  
  IShellFolder*   pHistoryFolder   =   NULL;  
  hr   =   pDesktopFolder->BindToObject(pidlHistoryFolder,   NULL,   IID_IShellFolder,   (void**)&pHistoryFolder);  
   
  //   Enumerate   the   history   items.  
  IEnumIDList*   pHistoryEnum   =   NULL;  
  hr   =   pHistoryFolder->EnumObjects(NULL,   SHCONTF_FOLDERS   |   SHCONTF_NONFOLDERS,   &pHistoryEnum);  
   
  ITEMIDLIST*   pidl   =   NULL;  
  ULONG   fetched   =   0;  
   
  hr   =   pHistoryEnum->Next(1,   &pidl,   &fetched);  
   
  if   (SUCCEEDED(hr))  
  {  
  const   ITEMIDLIST*   pidl2   =   pidl;  
   
  //   Get   the   IContextMenu   interface.  
  IContextMenu*   pContextMenu   =   NULL;  
  hr   =   pHistoryFolder->GetUIObjectOf(NULL,   1,   &pidl2,   IID_IContextMenu,   NULL,   (void**)&pContextMenu);  
   
  if   (SUCCEEDED(hr))  
  {  
  CMINVOKECOMMANDINFO   pCommandInfo   =   {   0   };  
   
  pCommandInfo.cbSize   =   sizeof(CMINVOKECOMMANDINFO);  
  pCommandInfo.lpVerb   =   _T("delete");  
  pCommandInfo.fMask   =   CMIC_MASK_FLAG_NO_UI;   //   has   no   effect  
  hr   =   pContextMenu->InvokeCommand(&pCommandInfo);  
  }  
   
  pContextMenu->Release();  
  }  
   
  pHistoryEnum->Release();  
  pHistoryFolder->Release();  
  pMalloc->Release();  
  pDesktopFolder->Release();  
  }

posted on 2006-06-06 10:27  henry  阅读(435)  评论(0编辑  收藏  举报