vc++ windows 快速启动栏创建快捷方式

创建快速启动栏

在windows软件开发中,软件安装过程中总是需要在快速启动栏创建快捷方式,下面介绍一种快速启动栏创建快捷方式的方法,具体代码如下:(该方法不支持win10,目前还没有找到win10的创建方法,有方法的朋友欢迎推荐)

/*

* 设置快速启动栏

* szExePath[in]:要创建快捷方式的exe文件全路径

* szLinkName[in]:要创建的快捷方式的名字

* iIcon[in]:要创建快捷方式的exe文件RC资源中的icon值(默认为0)

*/

void MainFrame::AddQueickLaunch(LPCTSTR szExePath, LPCTSTR szLinkName, int iIcon)

{

    //先获取系统版本号

    CWinVersion version;

    DWORD dwMajorVersion = 6;

    version.GetMajorVersion(dwMajorVersion);

    DWORD dwMinVersion = 0;

    version.GetMinorVersion(dwMinVersion);

    //xp系统

    if (dwMajorVersion < 6)

    {

       PIDLIST_ABSOLUTE ppidl = NULL;

       //获取Application Data的地址

       if (SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA, &ppidl) == S_OK)

       {

           TCHAR szQueickLaunchPath[MAX_PATH] = { 0 };

           BOOL flag = SHGetPathFromIDList(ppidl, szQueickLaunchPath);

           StringCchCat(szQueickLaunchPath, _countof(szQueickLaunchPath), _T("\\Microsoft\\Internet Explorer\\Quick Launch"));

           TCHAR szExeLinkFullPath[MAX_PATH] = { 0 };

           StringCchPrintf(szExeLinkFullPath, _countof(szExeLinkFullPath), _T("%s\\%s.lnk"), szQueickLaunchPath, szLinkName);

           //1、添加xp系统中的快速启动栏

           {

              CreateLinkAnother(szExePath, szExeLinkFullPath, iIcon);

              SHChangeNotify(SHCNE_ASSOCCHANGED,

                  SHCNF_FLUSH | SHCNF_PATH,

                  szExeLinkFullPath, 0);

           }

       }

    }

    ///win 10

    else if (dwMajorVersion == 10)

    {

       //win10暂不支持该方法

    }

    //win7/win8

    else

    {

      

       LPITEMIDLIST pidlBeginAt, pidlDestination;

       TCHAR szStartMenuPath[MAX_PATH] = { 0 };

       LPITEMIDLIST  ppidl = NULL;

       HRESULT hSpecialPath = SHGetSpecialFolderLocation(NULL, CSIDL_COMMON_PROGRAMS, &ppidl);

       if (hSpecialPath == S_OK)

       {

           BOOL flag = SHGetPathFromIDList(ppidl, szStartMenuPath);

           CoTaskMemFree(ppidl);

       }

       //创建一个目录用来放.lnk文件

       StringCchCat(szStartMenuPath, _countof(szStartMenuPath), _T("\\我的快速启动栏"));

       TCHAR szExeLinkFullPath[MAX_PATH] = { 0 };

       StringCchPrintf(szExeLinkFullPath, _countof(szExeLinkFullPath), _T("%s\\%s.lnk"), szStartMenuPath, szLinkName);

       ShellExecute(NULL, _T("taskbarpin"), szExeLinkFullPath, NULL, NULL, 0);

       SHChangeNotify(SHCNE_ASSOCCHANGED,

           SHCNF_FLUSH | SHCNF_PATH,

           szExeLinkFullPath, 0);

    }

}

其中CWinVersion的定义在我的另一篇博文中,可以到那边进行查看。

posted @ 2016-04-07 14:51  哼哼哈哈二将  阅读(760)  评论(0编辑  收藏  举报