转自博客堂
原文地址http://blog.joycode.com/roboo/posts/19962.aspx
如何让你的VC6也可以写出mc++的程序是一个有挑战性的工作,不过看来MS对于解决这个问题似乎是手到擒来.通过下载一个名叫Microsoft Visual C++ Toolkit 2003 的软件,就可以实现这样的愿望。
访问这个了解更多:http://msdn.microsoft.com/visualc/vctoolkit2003/
下载在这里:http://www.microsoft.com/downloads/details.aspx?FamilyId=272BE09D-40BB-49FD-9CB0-4BFA122FA91B&displaylang=en
当然,这个工具不仅仅是实现了这样的一个功能,他的推出可不是为了解决这个问题的。
1.和Vs2003几乎一致的编译器。有些MVP试验后发现,toolkit 2003的编译器版本是3052 (dated
February 21, 2003), 而vs2003的版本是3077(dated March 19, 2003) 几乎没有多少改变.
2。和Vs2003相同的STL以及C Runtime的支持
3.DotNet CLR
4.四个功能强大完善的例程
Jiang,Sheng ,a Microsoft Most Valuable Professional of Visual C++, became a Visual C++ programmer at 1999. He actives on several online Visual C++ forums ,blogs and newsgroups
4/28/2004
4/01/2004
编程删除IE历史
明天出发去西雅图参加微软全球最有价值专家年会了,暂停更新一段时间。
在你调用IUrlHistoryStg::DeleteUrl 之后, 这个URL项目仍旧会出现在IE历史纪录目录中。 你可以使用IContextMenu::InvokeCommand模拟一个手动删除命令,但是这样做的缺点是你不能够跳过删除确认对话框
下面的代码删除一个IE历史纪录目录中顶层目录的第一项。这通常是最久的历史纪录,但是你可以修改部分代码来删除需要的项目。
[pre]
// 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();
}
[/pre]
IUrlHistoryStg2::ClearHistory从IE历史纪录目录清除一已经被删除的URL项目。IUrlHistoryStg::DeleteUrl并非设计来用于删除历史记录中的URL项目,而是删除某个index.dat中的项目。因为很多内部函数依赖于它,所以它的行为不能被改变。同一时间内,保存历史记录的index.dat可能有多个。
在你调用IUrlHistoryStg::DeleteUrl 之后, 这个URL项目仍旧会出现在IE历史纪录目录中。 你可以使用IContextMenu::InvokeCommand模拟一个手动删除命令,但是这样做的缺点是你不能够跳过删除确认对话框
下面的代码删除一个IE历史纪录目录中顶层目录的第一项。这通常是最久的历史纪录,但是你可以修改部分代码来删除需要的项目。
[pre]
// 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();
}
[/pre]
IUrlHistoryStg2::ClearHistory从IE历史纪录目录清除一已经被删除的URL项目。IUrlHistoryStg::DeleteUrl并非设计来用于删除历史记录中的URL项目,而是删除某个index.dat中的项目。因为很多内部函数依赖于它,所以它的行为不能被改变。同一时间内,保存历史记录的index.dat可能有多个。
Visual Studio 6.0 Service Pack 6
FIX: "Cannot Save File" Error Message in the Visual C++ IDEhttp://support.microsoft.com/default.aspx?kbid=822856
VC终于解决了这个和杀毒软件冲突的问题了……
相关链接
List of bugs that are fixed in Visual Studio 6.0 Service Pack 6
http://support.microsoft.com/default.aspx?scid=kb;en-us;834001
Subscribe to:
Posts (Atom)