在C++代码 中使用Explorer.exe打开 一个文件所在目录的功能有如下两种 办法
一、使用ShellExcute
ShellExecute(NULL,NULL,explorerPath.c_str(),"select,C:\abc\a.cpp",NULL,SW_HIDE);
二、使用Win32API
void BrowseToFile(LPCTSTR filename)
{
ITEMIDLIST *pidl = ILCreateFromPath(filename);
if(pidl) {
SHOpenFolderAndSelectItems(pidl,0,0,0);
ILFree(pidl);
}
}
两种 办法都使用后,我都失败了~
奇怪的是我在ProcessMonitor中发现了ShellExcute 创建的进程,但是目录并没有打开。也就说这个功能失效了。
我查看了一下MSDN的文档。
Remarks
CoInitialize or CoInitializeEx must be called before using SHOpenFolderAndSelectItems. Not doing so causes SHOpenFolderAndSelectItems to fail.
果断加上COM初始化的这句代码,调用成功了。调用成功后不要忘记CoUnInitialize 。