用C++创建快捷方式

用C++创建快捷方式
主要用到的是COM组件。IShellLink和IPersistFile

  • 添加头函数 shobjidl.h
    //
    IPersistFile主要用到两个成员函数:
    1、Save。保存内容到文件中去
    2、Load。读取
    Load的函数原型

    HRESULT Load(
    LPCOLSTR pszFileName, //快捷方式的文件名,应该是ANSI字符
    DWORD dwMode //读取方式
    );

    dwMode可取如下值:

    STGM_READ:只读
    STGM_WRITE:只写
    STGM_READWRITE:读写

IShellLink主要成员:

1、GetArguments:获得参数信息
2、GetDescription:获得描述信息(备注行)
3、GetHotkey:获得快捷键
4、GetIconLocation:获得图标
5、GetIDList:获得快捷方式的目标对象的item identifier list (Windows外壳中的每个对象如文件,目录和打印机等都有唯一的item identifiler list)
6、GetPath: 获得快捷方式的目标文件或目录的全路径
7、GetShowCmd:获得快捷方式的运行方式,比如常规窗口,最大化
8、GetWorkingDirectory:获得工作目录
9、Resolve:按照一定的搜索规则试图获得目标对象,即使目标对象已经被删除或移动,重命名
下面是对应信息的设置方法
10、SetArguments
11、SetDescription
12、SetHotkey
13、SetIconLocation
14、SetIDList
15、SetPath
16、SetRelativePat
17、SetShowCmd
18、SetWorkingDirectory

  • 一般情况操作如下:
    一、初始化COM接口
    二、创建IShellLink对象
    三、从IShellLink对象中获取IPersistFile对象接口
    四、操作IShellLink对象
    五、释放IPersistFile对象接口
    六、释放IShellLink对象
    七、释放COM接口

  • MFC 代码如下

void CreateLink()
{
      //初始化com组件
      ::CoInitialize(NULL);

      LPITEMIDLIST pitemIlist;

      SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &pitemIlist);
      TCHAR szPath[MAX_PATH]{0};
       //从LPITEMIDLIST 获取桌面的路径
      SHGetPathFromIDList(pitemIlist, szPath);

      wcscat_s(szPath, L"\\newLink.lnk");

      IShellLink *pShellLink;
      IPersistFile *pPerFile;

      //创建对象
      CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
           IID_IShellLink, (LPVOID*)&pShellLink);

      TCHAR szSrcPath[MAX_PATH]{0};
      GetModuleFileName(NULL, szSrcPath, MAX_PATH);

      //  从IShellLink获取其IPersistFile接口
      pShellLink->QueryInterface(IID_IPersistFile, (LPVOID*)&pPerFile);


      //设置启动路径
      pShellLink->SetPath(szSrcPath);
     //设置热键 :"Ctrl+Alt +Q"
      pShellLink->SetHotkey(MAKEWORD('Q', HOTKEYF_CONTROL | HOTKEYF_ALT));
     //设置图标
      pShellLink->SetIconLocation(L"E:\\link.ico", 0);
     //保存路径
      pPerFile->Save(szPath, false);

    //释放!
      pPerFile->Release();
      pShellLink->Release();

      ::CoUninitialize();
}
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QPZME

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值