Copy codeThe Code is as follows: void CInstall_ProgressDlg: CreateShortCut (CString csLinkPath, CString csExePath, CString csIconPath)
{
HRESULT hres;
Hres =: CoInitialize (NULL );
If (S_ OK = hres)
{
// Delete old link
CFileFind cfind;
If (cfind. FindFile (csLinkPath )){
CFile: Remove (csLinkPath );
}
IShellLink * pShellLink;
Hres =: CoCreateInstance (CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **) & pShellLink );
If (SUCCEEDED (hres ))
{
PShellLink-> SetPath (csExePath );
If (PathFileExists (csIconPath ))
PShellLink-> SetIconLocation (csIconPath, 0 );
PShellLink-> SetHotkey (MAKEWORD ('R', HOTKEYF_SHIFT | HOTKEYF_CONTROL ));
CString csWorkingDir;
CsWorkingDir = csExePath. Left (2 );
CsWorkingDir. Append (FILE_SEPARATOR );
TRACE_CS (csWorkingDir );
PShellLink-> SetWorkingDirectory (csWorkingDir );
IPersistFile * pPersistFile;
Hres = pShellLink-> QueryInterface (IID_IPersistFile, (void **) & pPersistFile );
If (SUCCEEDED (hres ))
{
Hres = pPersistFile-> Save (csLinkPath, TRUE );
PPersistFile-> Release ();
}
PShellLink-> Release ();
}
: CoUninitialize ();
}
}
Copy codeThe Code is as follows: void CInstall_ProgressDlg: CreateStartMenu ()
{
TCHAR chStartupFolder [MAX_PATH];
/*
* Parm1: hwnd
* Parm2: path buffer
* Parm3: CSIDL_PROGRAMS 0x0002/Start Menu \ Programs
* Parm4: true: if file! Exist to create, false: not create
*/
SHGetSpecialFolderPath (this-> GetSafeHwnd (), chStartupFolder, CSIDL_PROGRAMS, FALSE );
CString csStartupFolder = chStartupFolder;
CsStartupFolder. Append (FILE_SEPARATOR );
CsStartupFolder. Append (FOLDER_APP_NAME );
If (! PathFileExists (csStartupFolder )){
G_InstallHelper.CreateInstallFolder (csStartupFolder );
}
CString csInstallPath;
CsInstallPath = g_InstallInfo.chInstallPath;
CString csEXEFilePath;
CsEXEFilePath = csInstallPath;
CsEXEFilePath. Append (FILE_SEPARATOR );
CsEXEFilePath. Append (FILE_APP_NAME );
CString csUnExeFilePath;
CsUnExeFilePath = csInstallPath;
CsUnExeFilePath. Append (FILE_SEPARATOR );
CsUnExeFilePath. Append (FILE_UNINSTALL_NAME );
CString csLinkFileName = csStartupFolder;
CsLinkFileName. Append (FILE_SEPARATOR );
CsLinkFileName. Append (LINK_NAME );
CsLinkFileName. Append (LINK_EXT );
CString csUnlinkFileName = csStartupFolder;
CsUnlinkFileName. Append (FILE_SEPARATOR );
CsUnlinkFileName. Append (LINK_UNINSTALL_NAME );
CsUnlinkFileName. Append (LINK_EXT );
// Get icon path
CString csExeIconPath;
CsExeIconPath = csInstallPath;
CsExeIconPath. Append (FILE_SEPARATOR );
CsExeIconPath. Append (ICON_APP_EXE_NAME );
CString csUnExeIconPath;
CsUnExeIconPath = csInstallPath;
CsUnExeIconPath. Append (FILE_SEPARATOR );
CsUnExeIconPath. Append (ICON_UNINSTALL_EXE_NAME );
TRACE_CS (csLinkFileName );
TRACE_CS (csEXEFilePath );
TRACE_CS (csExeIconPath );
TRACE_CS (csUnlinkFileName );
TRACE_CS (csUnExeFilePath );
TRACE_CS (csUnExeIconPath );
CreateShortCut (csLinkFileName, csEXEFilePath, csExeIconPath );
CreateShortCut (csUnlinkFileName, csUnExeFilePath, csUnExeIconPath );
}