MFC中使用COM组件更改桌面壁纸或图标
来源:互联网 发布:程序员怎么抢游戏号 编辑:程序博客网 时间:2024/05/17 04:00
需要包括的头文件方法如下所示:
二、在应用程序BOOL CBZApp::InitInstance() 中添加
AfxOleInit();
三、在使用IActiveDesktop的文件中添加:
#include <shlobj.h>
更换快捷方式图标
一、在 stdafx.h 文件中添加如下头文件:
#pragma once#ifndef VC_EXTRALEAN#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料#endif#include "targetver.h"#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将是显式的// 关闭 MFC 对某些常见但经常可放心忽略的警告消息的隐藏#define _AFX_ALL_WARNINGS#include <afxwin.h> // MFC 核心组件和标准组件#include <afxext.h> // MFC 扩展#include "wininet.h " //you should Add #include <afxdisp.h> // MFC 自动化类#include <afxdtctl.h> // MFC 对 Internet Explorer 4 公共控件的支持#ifndef _AFX_NO_OLE_SUPPORT#include <afxcmn.h> // MFC 对 Windows 公共控件的支持#endif#ifndef _AFX_NO_AFXCMN_SUPPORT#endif // _AFX_NO_AFXCMN_SUPPORT#include <afxconv.h> //you should Add #include <afxcontrolbars.h> // 功能区和控件条的 MFC 支持
二、在应用程序BOOL CBZApp::InitInstance() 中添加
AfxOleInit();
三、在使用IActiveDesktop的文件中添加:
#include <shlobj.h>
示例代码如下:
BOOL CBZDlg::SetWallPaper(CString strPath){ HRESULT hr; IActiveDesktop* pIAD; hr = CoCreateInstance( CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER, IID_IActiveDesktop, (void**)&pIAD); if ( !SUCCEEDED(hr) ) return FALSE; // 设置墙纸前先打开活动桌面开关 COMPONENTSOPT co = {0}; co.dwSize = sizeof(COMPONENTSOPT); co.fEnableComponents = TRUE; co.fActiveDesktop = TRUE; hr = pIAD->SetDesktopItemOptions(&co, 0); if ( !SUCCEEDED(hr) ) return FALSE; //做以下宽字符的转换是因为SetWallpaper的参数是用的LPCWSTR WCHAR wszPath[MAX_PATH]; LPTSTR lpStr = strPath.GetBuffer(strPath.GetLength()); MultiByteToWideChar(CP_ACP, 0, lpStr, -1, wszPath, MAX_PATH); strPath.ReleaseBuffer(); // 设置墙纸 hr = pIAD->SetWallpaper(wszPath, 0); if ( !SUCCEEDED(hr) ) return FALSE; // 设置墙纸风格 WALLPAPEROPT wp = {0}; wp.dwSize = sizeof(WALLPAPEROPT); wp.dwStyle |= WPSTYLE_CENTER; hr = pIAD->SetWallpaperOptions(&wp, 0); if ( !SUCCEEDED(hr) ) return FALSE; // 应用改变 hr = pIAD->ApplyChanges(AD_APPLY_ALL); if ( !SUCCEEDED(hr) ) return FALSE; // 最后释放接口,不要忘了 pIAD->Release(); return TRUE; }
获取桌面壁纸路径方法
void GetDesktopIconPath(){// 1. 初始化COM库(让Windows加载DLLs)。通常是在程序的InitInstance()中调用 // CoInitialize ( NULL )或其它启动代码。MFC程序使用AfxOleInit()。 CoInitialize(NULL);WCHAR wszWallpaper[MAX_PATH];CString strPath;HRESULT hr;IActiveDesktop* pIAD;// 2. 使用外壳提供的活动桌面组件对象类创建COM对象。 // 第四个参数通知COM需要什么接口(这里是IActiveDesktop). hr = CoCreateInstance(CLSID_ActiveDesktop,NULL,CLSCTX_INPROC_SERVER,IID_IActiveDesktop,(void**)&pIAD);if (SUCCEEDED(hr)){// 3. 如果COM对象被创建成功,则调用这个对象的GetWallpaper() 方法。 hr = pIAD->GetWallpaper(wszWallpaper, MAX_PATH, 0);if (SUCCEEDED(hr)){// 4. 如果 GetWallpaper() 成功,则输出它桌面壁纸文件名字。 // 注意这里使用wcout 来显示Unicode 串wszWallpaper. //wcout 是Unicode 专用,功能与cout.相同。 }// 5. 释放接口。 pIAD->Release();}// 6. 收回COM库。MFC 程序不用这一步,它自动完成。 CoUninitialize();}
添加快捷方式的方法
CString sWallpaper = L"C:\\Users\\Administrator\\Desktop\\test.exe"; //创建快捷方式IShellLink* pISL;IPersistFile* pIPF;// 1. 初始化COM库(让Windows 加载DLLs). 通常在InitInstance()中调用 // CoInitialize ( NULL )或其它启动代码。MFC 程序使用AfxOleInit()。 CoInitialize(NULL);// 2. 使用外壳提供的Shell Link组件对象类创建COM对象。. // 第四个参数通知COM 需要什么接口(这里是IShellLink)。 HRESULT hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pISL);if (SUCCEEDED(hr)){// 3. 设置快捷方式目标(墙纸文件)的路径。 hr = pISL->SetPath(sWallpaper);if (SUCCEEDED(hr)){// 4. 获取这个对象的第二个接口(IPersistFile)。 hr = pISL->QueryInterface(IID_IPersistFile, (void**)&pIPF);if (SUCCEEDED(hr)){// 5. 调用Save() 方法保存某个文件的快捷方式。第一个参数是 Unicode 串。 hr = pIPF->Save(L"C:\\测试.lnk", FALSE);// 6. 释放IPersistFile 接口。 pIPF->Release();}}// 6. 释放IShellLink 接口。 pISL->Release();}// 输出错误信息部分这里省略。 // 7. 收回COM 库。MFC 程序不用这一步,它自动完成。 CoUninitialize();
更换快捷方式图标
bool ChangeLinkIcon(const CString &strLnkName, const CString &strIconPath){HRESULT hres;IShellLink *psl = NULL;IPersistFile *pPf = NULL;bool bRet = false;do{hres = CoInitialize(NULL);if (SUCCEEDED(hres)){hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl);if (SUCCEEDED(hres)){psl->QueryInterface(IID_IPersistFile, (LPVOID*)&pPf);if (SUCCEEDED(hres)){pPf->Load(strLnkName, STGM_READWRITE);if(SUCCEEDED(hres)){hres = psl->SetIconLocation(strIconPath, 0);if(SUCCEEDED(hres)){pPf->Save(strLnkName, TRUE);}}}}}} while (0);if (pPf != NULL)pPf->Release();if (psl != NULL)psl->Release();CoUninitialize();return bRet;}
阅读全文
0 0
- MFC中使用COM组件更改桌面壁纸或图标
- MFC使用IActiveDesktop修改桌面壁纸
- MFC中更改程序显示图标
- 更改MFC程序图标
- MFC 更改系统图标
- 更改MFC图标
- 更改MFC程序图标
- MFC更改图标
- MFC中对生成exe文件的图标更改方法
- vc6中使用com组件
- 如何更改MFC程序图标
- 如何更改MFC程序图标
- VC: 更改MFC程序图标
- 随意更改桌面壁纸
- 在网页中使用COM组件(或activex控件)中的一些常见问题
- MFC写COM组件
- 使用MFC控件图标不会显示或资源不正常加载
- COM组件开发(五)——使用MFC开发COM组件
- 先验与后验
- jQuery常用方法,初级入门
- 重新构建树
- 我的Java设计模式-原型模式
- Java
- MFC中使用COM组件更改桌面壁纸或图标
- C++发展及程序员基本功
- 剑指Offer--二维数组的查找
- 一个图片处理工具类
- PHP-sftp文件上传
- android简单获取开发版sha1以及发布版sha1值
- hive简介--hive初步认识
- 剑指Offer-斐波那契数列以及跳台阶问题
- React Native 使用Redux全局共享state