//在桌面或者开始菜单中创建快捷方式
//pazSrcPath:源文件路径
//bDesktop:标志位,用来判断是否在桌面上创建快捷方式,真,在桌面上创建,否则在开始菜单中创建

bool createShortcut(const char* pszSrcPath, bool bDesktop)
{
    CoInitialize(NULL);

bool bRet = false;
    IShellLink* psl;
    LPITEMIDLIST pidl;
    LPMALLOC pShellMalloc;
    std::string strDesktopPath;
    std::string strStartMenuPath;

const int nFolder[2] = { CSIDL_DESKTOPDIRECTORY,CSIDL_STARTMENU };

if (SUCCEEDED(SHGetMalloc(&pShellMalloc))) {
        char Path[MAX_PATH + 1];
        for (int i = 0; i < 2; i++) {
            if (SUCCEEDED(SHGetSpecialFolderLocation(NULL, nFolder[i], &pidl))) {
                if (SHGetPathFromIDList(pidl, Path)) {
                    if (i == 0)
                        strDesktopPath = Path;
                    else
                        strStartMenuPath = Path;
                }
                pShellMalloc->Free(pidl);
            }
        }
        pShellMalloc->Release();
    }

char szFileTitle[MAX_PATH] = { 0 };
    ::GetFileTitle(pszSrcPath, szFileTitle, MAX_PATH);

std::string str;
    if (bDesktop)
        str = strDesktopPath;
    else
        str = strStartMenuPath;

str += "//";
    str += std::string(szFileTitle);
    str += ".lnk";

HRESULT hr = CoCreateInstance(CLSID_ShellLink,
             NULL,CLSCTX_INPROC_SERVER,
             IID_IShellLink,
             (LPVOID*)&psl);
    if (SUCCEEDED(hr)) {
        IPersistFile* ppf;
        psl->SetPath(pszSrcPath);
        psl->SetDescription("Shortcut created by custom code");
        psl->SetShowCmd(SW_SHOW);
        if (SUCCEEDED(psl->QueryInterface(IID_IPersistFile, (LPVOID *)&ppf))) {
            WORD mbw[MAX_PATH];
            MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str.c_str(), -1, mbw, MAX_PATH);
            if (SUCCEEDED(ppf->Save(mbw, TRUE)))
                bRet = true;
            ppf->Release();
        }
        psl->Release();
    }

CoUninitialize();

return bRet;
}

如何在桌面或者开始菜单中创建快捷方式相关推荐

  1. 硬件测试软件 桌面鼠标右键老转,去掉桌面鼠标右键菜单中显卡选项的3种方法(适用常见显卡)...

    只要我们更新过显卡驱动,或者你的现在的系统是出厂预装的,鼠标右键菜单中会有启动显卡控制中心选项.如:如果你是ATI显卡,右键菜单中便会有AMD VISION Engine Control Center ...

  2. 如何在程序中创建快捷方式

    通过手工操作建立这些菜单项或快捷方式并不复杂,在一般Windows使用手册中都有介绍,相信大家都很熟悉,在此不再赘述.笔者在有关资料的基础上,通过实践摸索,找到了在应用程序中完成上述工作的方法.这正是 ...

  3. 如何在程序中创建快捷方式?

    这里给出一个创建快捷方式的例子,是使用IShellLink和IPersistFile两个COM接口实现的. 例子代码如下: CFileDialog openDlg(TRUE, NULL, NULL, ...

  4. win7_64bit下桌面及开始菜单中图标变为.lnk

    以下内容参考整理与MSDN: 1.首先 win+r 2.打开运行程序 3.输入: regedit 4.找到: 计算机\HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\WIND ...

  5. android添加快捷按钮,Android中创建快捷方式代码实例

    1.添加权限(必须) 2.添加快捷键 public static void setupShortcut(Activity activity) { Intent shortcutIntent = new ...

  6. Linux中创建快捷方式

    方法如下: 1,进入一个目录 /usr/share/applications 2,复制一份已经有的类似文件(这里就按照eclipse来写) cp xxxxx.desktop eclipse.deskt ...

  7. linux怎么休眠快捷键,在Deepin系统中创建右键休眠选项的方法

    本文介绍在深度Deepin操作系统中创建右键休眠选项,以方便你更快的进入到系统休眠当中,实现方法非常简单,按照下面的步骤进行就可以了. 休眠的好处 系统休眠,可以让平时的工作环境保存到硬盘中,以便开机 ...

  8. 【Unity游戏开发基础】如何在游戏菜单中实现下拉列表选择画面质量

    [背景] 上一篇我们介绍了如何在菜单中创建调节音量大小的滚动条,现在我再来介绍一个游戏菜单中的常用设置,也就是下拉列表选择画面质量的功能如何实现. [步骤] 首先,在菜单UI Canvas上添加一个下 ...

  9. Kali的w3af安装及创建快捷方式的【详细】教程

    Kali安装w3af超级详细教程 我为了安装个w3af花了10个小时,因为网上能参考的教程比较少,有些报错的解决方法甚至网上都没有,特意记录下来,以供大家参考.整篇教程适合刚装的kali. 首先,由于 ...

最新文章

  1. 如何提升你的能力?给年轻程序员的几条建议
  2. window下lamp环境搭建
  3. 自学python语言-自学Python1.1-简介
  4. Django 2版本
  5. 用jquery mobile 实现幻灯片效果
  6. 机器人II(sdutoj2585)-JAVA
  7. C# WPF Application 下的文件操作
  8. 算法中各种距离的介绍
  9. vscode写python_vscode如何编写python?
  10. MVVM下listbox默认显示最后一行
  11. 带你了解HTTP协议(一)
  12. mtk led子系统概略
  13. 汇总 | 嵌入式软硬件领域各种“黑科技”
  14. 将汉字转化为拼音的js插件
  15. 微软跳上OpenID Bandwagon
  16. HTML5期末大作业:女装服装商城网站设计——女装服装商城(11页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页
  17. Scikit-plot画图
  18. redis常用命令getex_Redis常用命令整理
  19. MySQL通用函数汇总大全
  20. CoreDNS篇1-简介和安装

热门文章

  1. IPFS、区块链的libp2p
  2. CodeForces_29B
  3. 计算机网络题库——第6章 应用层
  4. Android TV Menu 3D星体旋转效果
  5. DSP与FPGA的技术特点和区别是什么?
  6. C#实现的QQ登录器
  7. conga(web gui)或cman+rgmanager配置rhcs的HA集群
  8. 物联网终端的防护体系
  9. 独角兽项目 7 - 从环境到测试
  10. 【idea】Error:java: Annotation processing is not supported for module cycles. Please ensure that all..