请高手把下面的C++程序翻译成DELPHI。

love_tu 2004-10-27 04:43:13
// 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();
}
...全文
123 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
love_tu 2004-10-28
  • 打赏
  • 举报
回复
问题解决,结贴。
stonewind 2004-10-28
  • 打赏
  • 举报
回复
不过说实话,你作这些不需要这么复杂,你在iedelphi上多看看,都是delphi处理ie的源程序,处理这个更是小菜一碟
love_tu 2004-10-28
  • 打赏
  • 举报
回复
其实只想删除IE的历史记录,但是调用IUrlHistoryStg接口,用ClearHistory方法不能删除干净,想找个更好的方法。
zhangnanonnet 2004-10-28
  • 打赏
  • 举报
回复
按照功能从新写吧.
李_军 2004-10-27
  • 打赏
  • 举报
回复
你直接说什么功能吧,为什么一定要翻译呢。说功能,我给你用delphi编一个
stonewind 2004-10-27
  • 打赏
  • 举报
回复
procedure DeleteUrlFromHistoryShell;
var
hr:HRESULT;
pDesktopFolder:^IShellFolder;
pMalloc:^IMalloc;
pidlHistoryFolder:^ITEMIDLIST;
pHistoryFolder:^IShellFolder;
pHistoryEnum:^IEnumIDList;
pidl:^ITEMIDLIST;
fetched:ULONG;
pidl2:^ITEMIDLIST;
pContextMenu:^IContextMenu;
pCommandInfo:CMINVOKECOMMANDINFO;
begin
// Call this if needed.
CoInitialize( Null );

pDesktopFolder := Null;
pMalloc := Null;

hr := SHGetMalloc(@pMalloc);

// Get desktop folder.
hr := SHGetDesktopFolder(@pDesktopFolder);

// Get the history folder.
pidlHistoryFolder := Null;
hr := SHGetSpecialFolderLocation(Null, CSIDL_HISTORY, @pidlHistoryFolder);

// Get the IShellFolder of the history folder.
pHistoryFolder := Null;
hr := pDesktopFolder.BindToObject(pidlHistoryFolder, Null, IID_IShellFolder, @pHistoryFolder);

// Enumerate the history items.
pHistoryEnum := NULL;
hr := pHistoryFolder.EnumObjects(Null, SHCONTF_FOLDERS and SHCONTF_NONFOLDERS, @pHistoryEnum);

pidl := Null;
fetched := 0;

hr := pHistoryEnum.Next(1, @pidl, @fetched);

if (SUCCEEDED(hr)) then
begin
pidl2 := pidl;

// Get the IContextMenu interface.
pContextMenu := Null;
hr := pHistoryFolder.GetUIObjectOf(Null, 1, @pidl2, IID_IContextMenu, Null, @pContextMenu);

if (SUCCEEDED(hr)) then
begin
pCommandInfo := nil;

pCommandInfo.cbSize := sizeof(CMINVOKECOMMANDINFO);
pCommandInfo.lpVerb := 'delete';
pCommandInfo.fMask := CMIC_MASK_FLAG_NO_UI; // has no effect
hr := pContextMenu.InvokeCommand(@pCommandInfo);
end;

pContextMenu._Release;
end;

pHistoryEnum._Release;
pHistoryFolder._Release;
pMalloc._Release;
pDesktopFolder._Release;
end;
chlchen 2004-10-27
  • 打赏
  • 举报
回复
郁闷哦。我会DELPHI但是才开始学VC,哎,爱慕能助啊!!!
DentistryDoctor 2004-10-27
  • 打赏
  • 举报
回复
转到Delphi吧。
kugou123 2004-10-27
  • 打赏
  • 举报
回复
没学过DELPHI。
UP
love_tu 2004-10-27
  • 打赏
  • 举报
回复
up
changlin365 2004-10-27
  • 打赏
  • 举报
回复
up
huaboy408 2004-10-27
  • 打赏
  • 举报
回复
dephi不会用!

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧