C++ 创建桌面快捷方式 开始菜单的实现代码

 更新时间:2013年06月30日 15:39:50   作者:  
这篇文章介绍了C++ 创建桌面快捷方式,开始菜单的实现代码,需要的朋友可以参考一下

复制代码 代码如下:

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

相关文章

  • VC定制个性化的MessageBox解决方法

    VC定制个性化的MessageBox解决方法

    这篇文章主要介绍了VC定制个性化的MessageBox解决方法,有助于进一步的了解windows应用程序的消息机制及运行原理,需要的朋友可以参考下
    2014-07-07
  • C++实现单链表按k值重新排序的方法

    C++实现单链表按k值重新排序的方法

    这篇文章主要介绍了C++实现单链表按k值重新排序的方法,结合实例形式分析了C++单链表中按照给定值进行判断与排序的相关操作技巧,需要的朋友可以参考下
    2017-05-05
  • CreateThread()与beginthread()的区别详细解析

    CreateThread()与beginthread()的区别详细解析

    很多开发者不清楚这两者之间的关系,他们随意选一个函数来用,发现也没有什么大问题,于是就忙于解决更为紧迫的任务去了。等到有一天忽然发现一个程序运行时间很长的时候会有细微的内存泄露,开发者绝对不会想到是因为这两套函数用混的结果
    2013-09-09
  • 深入解析Linux下\r\n的问题

    深入解析Linux下\r\n的问题

    本篇文章是对Linux下\r\n的问题进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 标准C++类string的Copy-On-Write技术

    标准C++类string的Copy-On-Write技术

    这里,我想从C++类或是设计模式的角度为各位揭开Copy-On-Write技术在string中实现的面纱,以供各位在用C++进行类库设计时做一点参考
    2013-11-11
  • C++中的map使用方法详解

    C++中的map使用方法详解

    C++中的map是一种关联容器,用于存储键值对。它提供了一种非常高效的方法来快速查找特定的值,并且允许我们根据键来排序和遍历数据。在本文中,我们将深入了解C++中的map以及如何使用它来提高程序的效率,感兴趣的朋友可以参考下
    2023-05-05
  • C++ Boost命令行解析库的应用详解

    C++ Boost命令行解析库的应用详解

    命令行解析库是一种用于简化处理命令行参数的工具,它可以帮助开发者更方便地解析命令行参数并提供适当的帮助信息,本文主要介绍了不同的命令行解析库和它们在C++项目中的应用,希望对大家有所帮助
    2023-11-11
  • c++的virtual和override作用及说明

    c++的virtual和override作用及说明

    这篇文章主要介绍了c++的virtual和override作用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • opencv 做人脸识别 opencv 人脸匹配分析

    opencv 做人脸识别 opencv 人脸匹配分析

    opencv 人脸识别通过级联分类器对特征的分级筛选来确定是否是人脸,每个节点的正确识别率很高,但正确拒绝率很低,任一节点判断没有人脸特征则结束运算,宣布不是人脸
    2012-11-11
  • C++实现推箱子功能附加回撤示例

    C++实现推箱子功能附加回撤示例

    本文主要介绍了C++实现推箱子功能附加回撤示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10

最新评论