#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 ;
}