COM原理
+ -

COM 使用MFC建立快捷方式

2022-02-23 13 0

“快捷方式”组件的结构示意图:
快捷方式

“快捷方式”组件(CLSID_ShellLink),有3个(其实不止)接口,每个接口有一组相关功能的函数。

  • IShellLink 接口(IID_IShellLink)提供快捷方式的参数读写功能
  • IPersistFile接口(IID_IPersistFile)提供快捷方式持续性文件的读写功能。
    对象的持续性,是一个常用且功能强大的接口家族。了解其中两个函数:IPersistFile::Save和IPersistFile:Load。

在D盘创建一个NOTEPAD的快捷方工式。


#include < atlconv.h >
void CreateShortcut(LPCTSTR lpszExe, LPCTSTR lpszLnk)
{
    //建立块捷方式。参数lpszExe:EXE文件全路径名;lpszLnk:快捷方式文件全路径名
    IShellLink* psl = NULL;
    IPersistFile* ppf = NULL;
    TCHAR szWorkPath[MAX_PATH];                //根据EXE的文件名,得到目录名
    CoInitialize(NULL);
    HRESULT hr = CoCreateInstance(CLSID_ShellLink,        //启动组件。快捷方式CLSID
        NULL,                //聚合用
        CLSCTX_INPROC_SERVER,    //进程内(Shell32.dll)服务
        IID_IShellLink,            //IShellLink的IID
        (LPVOID*)&psl);        //得到接口指针
    if (SUCCEEDED(hr))
    {
        psl->SetPath(lpszExe);                        //全路径程序名
        //        psl->SetArguments();                    //命令行参数
        //        psl->SetDescription();                    //备注
        //        psl->SetHotkey();                    //快捷键
        //        psl->SetIconLocation();                //图标
        //        psl->SetShowCmd();                    //窗口尺寸
        lstrcpy(szWorkPath, lpszExe);
        LPTSTR lp = szWorkPath;                    //定义指针变量(将szWorkPath首址存入lp中)
        while (*lp)lp++;                            //找到串的末尾
        while ('\\' != *lp)lp--;                        //从末尾找最后一个\符
        *lp = 0;
        psl->SetWorkingDirectory(szWorkPath);            //设置EXE程序的默认工作目录
        hr = psl->QueryInterface(IID_IPersistFile,            //查找持续性文件接口指针,持续性接口IID
            (LPVOID*)&ppf);        //得到接口指针
        if (SUCCEEDED(hr))
        {
            USES_CONVERSION;                        //转换为 UNICODE 字符串
            ppf->Save(T2COLE(lpszLnk), TRUE);            //保存
        }
    }
    if (ppf)ppf->Release();
    if (psl)psl->Release();
    CoUninitialize();
}

void CTTDlg::OnBnClickedButton2()
{
    CreateShortcut(TEXT("c:\\windows\\notepad.exe"),
        TEXT("D:\\我的记事本.lnk"));
    //用程序实现寻找桌面的路径,可查注册表
    //HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
}

0 篇笔记 写笔记

COM 使用MFC建立快捷方式
快捷方式”组件的结构示意图:“快捷方式”组件(CLSID_ShellLink),有3个(其实不止)接口,每个接口有一组相关功能的函数。IShellLink 接口(IID_IShellLink)提供快捷方式的参数读写功能IPersistFile接口(IID_IPersistFile)提供快捷方......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!