C++ 和 com 创建快捷方式
2005-04-29 09:03
477 查看
#include <stdio.h>
#include <objbase.h>
#include <shlobj.h>
#include <shlguid.h>
int sendshort(char *filename,char *folder,char *linkname=NULL){
char *p=strrchr(filename,'//');
if(p==NULL) return 0;
if(linkname==NULL){
linkname=(p+1);
}
char Path[1024]={0};
sprintf(Path,"/"%s/"",filename);
char workdir[1024]={0};
sprintf(workdir,"/"%s/"",filename);
*(workdir+(p-filename)+1)='/"';
*(workdir+(p-filename)+2)=0;
if (CoInitialize(NULL)!=S_OK)
{
return FALSE;
}
IShellLink* pISL=NULL;
IPersistFile* pIPF;
int hr = CoCreateInstance ( CLSID_ShellLink,
NULL,
CLSCTX_INPROC_SERVER,
IID_IShellLink,
(void**) &pISL );
if(pISL==NULL){
printf("error");
}
if(hr==S_OK){
//printf("%s","CoCreateInstance OK/n");
}else if(hr==REGDB_E_CLASSNOTREG){
printf("%s","unreg error!/n");
return 1;
}else if(hr==CLASS_E_NOAGGREGATION){
printf("%s","CLASS_E_NOAGGREGATION!/n");
return 1;
}else if(hr==E_NOINTERFACE ){
printf("%s","E_NOINTERFACE!/n");
return 1;
}else{
printf("error/n");
return 1;
}
hr = pISL->SetPath (Path);
if (hr!=S_OK){
printf("%s","SetPath error!/n");
return 1;
}
hr = pISL->SetWorkingDirectory(workdir);
if (hr!=S_OK){
printf("%s","SetPath error!/n");
return 1;
}
hr = pISL->QueryInterface ( IID_IPersistFile, (void**) &pIPF );
if (hr!=S_OK){
printf("%s","QueryInterface error!/n");
return 1;
}
char linkpath[1024]={0};
wchar_t wlinkpath[1024]={0};
sprintf(linkpath,"%s//%s.lnk",folder,linkname);
//printf("%s/n",linkpath);
MultiByteToWideChar(CP_ACP,0,linkpath,strlen(linkpath)+1,wlinkpath,1024);
hr = pIPF->Save(wlinkpath, FALSE);
if (hr!=S_OK){
wprintf(L"%s/n",wlinkpath);
printf("%s","Save error!/n");
return 1;
}
pISL->Release();
CoUninitialize();
return TRUE;
}
#include <objbase.h>
#include <shlobj.h>
#include <shlguid.h>
int sendshort(char *filename,char *folder,char *linkname=NULL){
char *p=strrchr(filename,'//');
if(p==NULL) return 0;
if(linkname==NULL){
linkname=(p+1);
}
char Path[1024]={0};
sprintf(Path,"/"%s/"",filename);
char workdir[1024]={0};
sprintf(workdir,"/"%s/"",filename);
*(workdir+(p-filename)+1)='/"';
*(workdir+(p-filename)+2)=0;
if (CoInitialize(NULL)!=S_OK)
{
return FALSE;
}
IShellLink* pISL=NULL;
IPersistFile* pIPF;
int hr = CoCreateInstance ( CLSID_ShellLink,
NULL,
CLSCTX_INPROC_SERVER,
IID_IShellLink,
(void**) &pISL );
if(pISL==NULL){
printf("error");
}
if(hr==S_OK){
//printf("%s","CoCreateInstance OK/n");
}else if(hr==REGDB_E_CLASSNOTREG){
printf("%s","unreg error!/n");
return 1;
}else if(hr==CLASS_E_NOAGGREGATION){
printf("%s","CLASS_E_NOAGGREGATION!/n");
return 1;
}else if(hr==E_NOINTERFACE ){
printf("%s","E_NOINTERFACE!/n");
return 1;
}else{
printf("error/n");
return 1;
}
hr = pISL->SetPath (Path);
if (hr!=S_OK){
printf("%s","SetPath error!/n");
return 1;
}
hr = pISL->SetWorkingDirectory(workdir);
if (hr!=S_OK){
printf("%s","SetPath error!/n");
return 1;
}
hr = pISL->QueryInterface ( IID_IPersistFile, (void**) &pIPF );
if (hr!=S_OK){
printf("%s","QueryInterface error!/n");
return 1;
}
char linkpath[1024]={0};
wchar_t wlinkpath[1024]={0};
sprintf(linkpath,"%s//%s.lnk",folder,linkname);
//printf("%s/n",linkpath);
MultiByteToWideChar(CP_ACP,0,linkpath,strlen(linkpath)+1,wlinkpath,1024);
hr = pIPF->Save(wlinkpath, FALSE);
if (hr!=S_OK){
wprintf(L"%s/n",wlinkpath);
printf("%s","Save error!/n");
return 1;
}
pISL->Release();
CoUninitialize();
return TRUE;
}
相关文章推荐
- 创建一个用于建立快捷方式的COM 对象并取得IShellLink 接口。
- C++ 创建快捷方式的最简单方法
- C# 无需COM组件创建快捷方式的实现代码
- 用C++创建快捷方式
- C++创建和解析Windows快捷方式文件lnk的程序
- Windows下c++创建快捷方式
- c++ 创建桌面快捷方式
- C++实现在桌面创建程序的快捷方式
- C++创建桌面快捷方式
- 【框架-MFC】C++ 创建快捷方式
- C++实现在桌面创建程序的快捷方式
- 【COM/ATL】创建Url快捷方式
- 采用COM方法 创建应用程序的快捷方式(菜鸟版)
- C++ 创建快捷方式的最简单方法
- Android 快捷方式的创建与查询 快捷方式问题大全 获取快捷方式在Launcher数据库中的信息 Failed to find provider info for com.android.la
- Windows下c++创建快捷方式
- 用masm32创建快捷方式--使用com的演示程序
- 使用 COM 类库创建链接桌面快捷方式
- 【转载】C++实现在桌面创建程序的快捷方式
- C++ 创建快捷方式的最简单方法