您的位置:首页 > 编程语言 > C语言/C++

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: