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