#include <shlobj.h>
#include <tchar.h>#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <process.h>
#include <conio.h>
#include <time.h>
#include <cstdio>
#include <stdarg.h>
#include <signal.h>
#include <stdlib.h>#include <string.h>
HRESULT GetShellFolderViewDual(ITEMIDLIST* pidl, IShellFolderViewDual** ppIShellFolderViewDual) {
IWebBrowserApp* pIWebBrowserApp;
IDispatch* pDoc;
HWND hWnd;
HRESULT hr;
HINSTANCE ghSHDOCVW; HRESULT(WINAPI * gpfSHGetIDispatchForFolder)(ITEMIDLIST * pidl, IWebBrowserApp * *ppIWebBrowserApp);
*ppIShellFolderViewDual = NULL;
ghSHDOCVW = LoadLibrary(_T("SHDOCVW.DLL"));
if(ghSHDOCVW == NULL)
return FALSE;
pIWebBrowserApp = NULL;
gpfSHGetIDispatchForFolder = (HRESULT(WINAPI *)(ITEMIDLIST *, IWebBrowserApp * *)) GetProcAddress(ghSHDOCVW, "SHGetIDispatchForFolder ");
if(gpfSHGetIDispatchForFolder == NULL)
return FALSE;
if(SUCCEEDED(gpfSHGetIDispatchForFolder(pidl, &pIWebBrowserApp))) {
if(SUCCEEDED(pIWebBrowserApp-> get_HWND((long *) &hWnd))) {
SetForegroundWindow(hWnd);
ShowWindow(hWnd, SW_SHOWNORMAL);
}
if(SUCCEEDED(hr = pIWebBrowserApp-> get_Document(&pDoc))) {
pDoc-> QueryInterface(IID_IShellFolderViewDual, (void * *) ppIShellFolderViewDual);
pDoc-> Release();
}
pIWebBrowserApp-> Release();
}
FreeLibrary(ghSHDOCVW);
return TRUE;
} BOOL XZSHOpenFolderAndSelectItems(ITEMIDLIST* pidlFolder) {
HRESULT(WINAPI * gpfSHOpenFolderAndSelectItems)(LPCITEMIDLIST * pidlFolder, UINT cidl, LPCITEMIDLIST * apidl, DWORD dwFlags);
HINSTANCE ghShell32;
ghShell32 = LoadLibrary(_T("Shell32.DLL"));
if(ghShell32 == NULL) {
return FALSE;
}
gpfSHOpenFolderAndSelectItems = (HRESULT(WINAPI *)(LPCITEMIDLIST *, UINT, LPCITEMIDLIST *, DWORD))
GetProcAddress(ghShell32, "SHOpenFolderAndSelectItems");
if(gpfSHOpenFolderAndSelectItems != NULL) {
if(SUCCEEDED(gpfSHOpenFolderAndSelectItems((LPCITEMIDLIST *) pidlFolder, 0, (LPCITEMIDLIST *) NULL, 0))) {
FreeLibrary(ghShell32);
return TRUE;
}
FreeLibrary(ghShell32);
return FALSE;
}
FreeLibrary(ghShell32);
return FALSE;
}
void FindTarget(LPCTSTR str) {
HRESULT hres;
IShellLink* psl;
ITEMIDLIST* pidl;
IPersistFile* ppf;
CoInitialize(NULL);
printf("11111111, err=%d\n", GetLastError());
hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID *) &psl);
if(SUCCEEDED(hres)) {
printf("222222222, err=%d\n", GetLastError());
psl-> SetPath(str);
printf("666666666 , err=%d\n", GetLastError());
psl-> GetIDList(&pidl);
hres = psl-> QueryInterface(IID_IPersistFile, (void * *) &ppf);
if(SUCCEEDED(hres)) {
printf("3333333333, err=%d\n", GetLastError());
WCHAR wsz[MAX_PATH];
#ifdef _UNICODE
wcscpy(wsz, str);
#else
MultiByteToWideChar(CP_ACP, 0, str, -1, wsz, MAX_PATH);
#endif
// Load the shortcut.
hres = ppf-> Load(wsz, STGM_READ);
if(SUCCEEDED(hres)) {
printf("444444444, err=%d\n", GetLastError());
psl-> GetIDList(&pidl);
}
ppf-> Release();
}
printf("55555555555, err=%d\n", GetLastError());
XZSHOpenFolderAndSelectItems(pidl); psl-> Release();
}
CoUninitialize();
}int main(int argc, char* argv[]) { FindTarget(("c:\日啊日.txt"));
return 0;
}我想要的就功能是 和Explorer的文件的快捷方式的属性对话框中“查找目标”那样
就像以上代码是我从网上找来的
他原先是 void FindTarget(CString str)
但我的程序不用mfc,就改成了 void FindTarget(LPCTSTR str)
请问应该如何修改?
解决方案 »
- 我想在我的程序中打印一个小箭头,就是word中按回车出现的小箭头,谁能给我?
- 如何让MFC窗体的图标不在任务栏里显示?
- 请教:关于注册表中类型为REG_BINARY的数据处理
- 帮忙调试一下这80行代码
- com组件中的DoModal()问题
- vc++是否区分大小写?
- 招聘 c/vc程序员(上海)
- 在哪可以找到有关ISO层次结构的详细中文资料?
- 如何作如下的窗口
- 各位大侠,小弟在开发程序中遇到一个问题,请问在vc++6中是否有显示JPG图片的控件,要求该控件加载的JPG能自动适用控件的大小,而非显示jpg的一部分,如果没用该控件的话,用编程又如何实现,请赐教!
- wtl 的CSplitterWindow 左右分割,想固定右边的大小,但已修改窗口大小 分割条就跑到左边去 导致左边窗口不显示了 请高手帮组解决
- 控件编译 出现Error executing midl.exe错误 有知道原因的么?
以上代码不能正确实现。
"SHGetIDispatchForFolder " 最后的空格去掉了,也不行
MFC中的【CString】类和【char*】还是有一定区别的。
最大的区别在于,CString类会自动申请内存,而用char*需要自己申请和释放内存。
return 0;
}
参数要给快捷方式的文件名及路径。
FindTarget(_T("c:\日啊日.txt")); 出现如下结果11111111, err=0
222222222, err=0
666666666 , err=183
3333333333, err=183
55555555555, err=123
Press any key to continue
〖183〗-当文件已存在时,无法创建该文件。
〖123〗-文件名、目录名或卷标语法不正确。 为什么会有123错误
如果 FindTarget(_T("c:\\日啊日.txt")); 出现如下结果11111111, err=0
222222222, err=0
666666666 , err=1
3333333333, err=1
444444444, err=0
55555555555, err=0
Press any key to continue〖1〗-功能错误。
结果
11111111, err=0
222222222, err=0
666666666 , err=183
3333333333, err=183
55555555555, err=2
Press any key to continue〖2〗-系统找不到指定的文件。
MultiByteToWideChar(CP_ACP, 0, str, -1, wsz, MAX_PATH);
去掉后用 FindTarget(_T("c:\\日啊日.txt")); 一切正常