C++ 創(chuàng)建桌面快捷方式 開(kāi)始菜單的實(shí)現(xiàn)代碼
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();
}
}
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);
}
相關(guān)文章
CreateThread()與beginthread()的區(qū)別詳細(xì)解析
很多開(kāi)發(fā)者不清楚這兩者之間的關(guān)系,他們隨意選一個(gè)函數(shù)來(lái)用,發(fā)現(xiàn)也沒(méi)有什么大問(wèn)題,于是就忙于解決更為緊迫的任務(wù)去了。等到有一天忽然發(fā)現(xiàn)一個(gè)程序運(yùn)行時(shí)間很長(zhǎng)的時(shí)候會(huì)有細(xì)微的內(nèi)存泄露,開(kāi)發(fā)者絕對(duì)不會(huì)想到是因?yàn)檫@兩套函數(shù)用混的結(jié)果2013-09-09
標(biāo)準(zhǔn)C++類(lèi)string的Copy-On-Write技術(shù)
這里,我想從C++類(lèi)或是設(shè)計(jì)模式的角度為各位揭開(kāi)Copy-On-Write技術(shù)在string中實(shí)現(xiàn)的面紗,以供各位在用C++進(jìn)行類(lèi)庫(kù)設(shè)計(jì)時(shí)做一點(diǎn)參考2013-11-11
C++ Boost命令行解析庫(kù)的應(yīng)用詳解
命令行解析庫(kù)是一種用于簡(jiǎn)化處理命令行參數(shù)的工具,它可以幫助開(kāi)發(fā)者更方便地解析命令行參數(shù)并提供適當(dāng)?shù)膸椭畔?本文主要介紹了不同的命令行解析庫(kù)和它們?cè)贑++項(xiàng)目中的應(yīng)用,希望對(duì)大家有所幫助2023-11-11
c++的virtual和override作用及說(shuō)明
這篇文章主要介紹了c++的virtual和override作用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
opencv 做人臉識(shí)別 opencv 人臉匹配分析
opencv 人臉識(shí)別通過(guò)級(jí)聯(lián)分類(lèi)器對(duì)特征的分級(jí)篩選來(lái)確定是否是人臉,每個(gè)節(jié)點(diǎn)的正確識(shí)別率很高,但正確拒絕率很低,任一節(jié)點(diǎn)判斷沒(méi)有人臉特征則結(jié)束運(yùn)算,宣布不是人臉2012-11-11

