• Cpp创建桌面快捷方式lnk


    Cpp操作Windows快捷方式

    总结主要有二个操作:
    新建 和 解析
    主要用到的是COM组件 IShellLink 和 IPersistFile
    需要添加的头文件 shlobj.h
    IPersistFile主要用到两个成员函数:
    1、Load 读取函数
    原型:
    HRESULT Load(
    	LPCOLSTR pszFileName, //快捷方式的文件绝对路径
        DWORD    dwMode       //读取模式
    );
    
    • 1
    • 2
    • 3
    • 4
    如果dwMode为 0,则实现应使用用户打开文件时使用的任何默认权限打开文件。
    dwMode取自STGM枚举,例如:
    STGM_READ:只读
    STGM_WRITE:只写
    STGM_READWRITE:读写
    
    • 1
    • 2
    • 3
    2、Save 保存内容到文件
    原型:
    HRESULT Save(
        LPCOLESTR pszFileName, //应保存到的绝对路径。若为NULL,则将其数据保存到当前文件(若存在)。
        BOOL      fRemember //是否将pszFileName参数用作当前工作文件。
                            //TRUE:保存当前文件。
                            //FALSE:将副本另存为...操作。
                            //如果pszFileName为NULL,则忽略。
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    操作步骤

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

    Cpp示例代码:

    // win10
    // 在桌面上创建快捷方式
    #include 
    #include 
    
    int main()
    {
    	HRESULT hRet;
    	IShellLink* pLink; //IShellLink对象指针
    	IPersistFile* ppf; //IPersisFil对象指针
    	WCHAR wsz[MAX_PATH]; //定义Unicode字符串
    	//初始化COM库
    	hRet = ::CoInitialize(nullptr);
    	if (hRet != S_OK)
    	{
    		//初始化COM库失败,直接返回
    		printf("初始化COM库失败");
    		return 0;
    	}
    	//创建IShellLink实例
    	hRet = ::CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pLink);
    	if (hRet != S_OK)
    	{
    		printf("创建IShellLink实例失败\n");
    	}
    	else
    	{
    		//创建IShellLink实例成功,继续操作
    		//从IShellLink对象中获取IPersistFile接口
    		hRet = pLink->QueryInterface(IID_IPersistFile, (void**)&ppf);
    		if (hRet != S_OK)
    		{
    			printf("获取IPersistFile接口失败\n");
    		}
    		else
    		{
    			//获取接口成功,继续操作
    			//设置快捷方式中的程序路径
    			pLink->SetPath("c://aa.exe");
    			//设置快捷方式的工作目录
    			pLink->SetWorkingDirectory("c://");
    			//确保快捷方式路径由ANSI字符串组成
    			LPCSTR lpstr;
    			lpstr = "C://Users//username//Desktop//创建的快捷方式.lnk";
    			MultiByteToWideChar(CP_ACP, 0, lpstr, -1, wsz, MAX_PATH);
    			//保存快捷方式
    			ppf->Save(wsz, TRUE);
    		}
    	}
    	//释放IPersistFile接口
    	ppf->Release();
    	//释放IShellLink对象
    	pLink->Release();
    	//释放COM接口
    	::CoUninitialize();
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    获取桌面文件目录或当前文件目录请看C/Cpp获取桌面目录和当前文件目录

  • 相关阅读:
    c++ 多线程编程demo
    SystemVerilog Assertions应用指南 第一章(1.23章节 “intersect”运算符)
    从离线到实时对客,湖仓一体释放全量数据价值
    oracle 数据库删除序列
    洛谷P1057 [NOIP2008 普及组] 传球游戏
    【附源码】计算机毕业设计JAVA超市货品进销存系统后台
    世界上第一台个人电脑是哪台?
    【面试小姿势】数据库设计的三大范式及其应用
    Qt基础教程:数据类型与容器
    RabbitMQ(五)【入门案例】
  • 原文地址:https://blog.csdn.net/qq_51311937/article/details/127799101