void NotifyShell(LONG wEventId,//事件标志
LPSTR szPath)//路径
{
SHChangeNotify( wEventId, SHCNF_FLUSH | SHCNF_PATH, szPath,0);
//取得szPath的父目录
char* p;
for( p=szPath+lstrlen(szPath)-1; *p != '//'; p--);
*p='/0';
SHChangeNotify(SHCNE_UPDATEDIR |SHCNE_INTERRUPT, SHCNF_FLUSH | SHCNF_PATH,szPath,0);
}
//创建快捷方式
BOOL CreateLink (LPSTR szPath,LPSTR szLink)
/*szPath 快捷方式的目标应用程序名
szLink快捷方式的数据文件名(*.lnk) */
{
HRESULT hres ;
IShellLink * psl ;
IPersistFile* ppf ;
WORD wsz[ MAX_PATH] ;
初始化COM
CoInitialize (NULL);
//创建一个IShellLink实例
hres = CoCreateInstance( CLSID_ShellLink, NULL,CLSCTX_INPROC_SERVER, IID_IShellLink,
(void **)&psl) ;
if( FAILED( hres))
{
CoUninitialize ();
return FALSE ;
}
//设置目标应用程序
psl -> SetPath( szPath) ;
//设置快捷键(此处设为Shift+Ctrl+'R')
// psl -> SetHotkey( MAKEWORD( 'R',
// HOTKEYF_SHIFT |HOTKEYF_CONTROL)) ;
char* p;
for( p=szPath+lstrlen(szPath)-1; *p != '//'; p--);
*p='/0';
psl -> SetWorkingDirectory(szPath);
//从IShellLink获取其IPersistFile接口
//用于保存快捷方式的数据文件 (*.lnk)
hres = psl -> QueryInterface( IID_IPersistFile, (void**)&ppf) ;
if( FAILED( hres))
{
CoUninitialize ();
return FALSE ;
}
// 确保数据文件名为ANSI格式
MultiByteToWideChar( CP_ACP, 0, szLink, -1, wsz, MAX_PATH) ;
//调用IPersistFile::Save
//保存快捷方式的数据文件 (*.lnk)
hres = ppf -> Save( wsz, STGM_READWRITE);
//释放IPersistFile和IShellLink接口
ppf -> Release( ) ;
psl -> Release( ) ;
CoUninitialize ();
return TRUE;
}
void CreateThisAppShortcut()
{
char szPath[MAX_PATH]=""; //快捷方式的目标应用程序名
char szLink[MAX_PATH]=""; //快捷方式的数据文件名
桌面快捷方式
GetModuleFileName(NULL, szPath, MAX_PATH);
GetWindowsDirectory(szLink, MAX_PATH);
if(szLink[lstrlen(szLink)-1] == '//')
lstrcat(szLink, "Desktop//EStk接收设置.lnk");
else
lstrcat(szLink, "//Desktop//EStk接收设置.lnk");
// 创建快捷方式
if(!CreateLink( szPath, szLink) )
return;
// 通知shell有关变化
NotifyShell( SHCNE_CREATE|SHCNE_INTERRUPT,szLink) ;
快速启动快捷方式
GetModuleFileName(NULL, szPath, MAX_PATH);
GetWindowsDirectory(szLink, MAX_PATH);
if(szLink[lstrlen(szLink)-1] == '//')
lstrcat(szLink, "Application Data//Microsoft//Internet Explorer//Quick Launch//EStk接收设置.lnk");
else
lstrcat(szLink, "//Application Data//Microsoft//Internet Explorer//Quick Launch//EStk接收设置.lnk");
if(!CreateLink( szPath, szLink) )
return;
NotifyShell( SHCNE_CREATE|SHCNE_INTERRUPT, szLink) ;
}