创建一个用于建立快捷方式的COM 对象并取得IShellLink 接口。
2012-03-31 08:52
519 查看
/* 第二个例子展示了如何使用一个提供单接口的COM对象QueryInterface()函数。 其中的代码用外壳的Shell Link组件对象类创建我们在第一个例子中获得的 墙纸文件的快捷方式 以下是编程步骤: 初始化COM 库。 创建一个用于建立快捷方式的COM 对象并取得IShellLink 接口。 调用IShellLink 接口的SetPath()方法 调用对象的QueryInterface()函数并取得IPersistFile接口。 调用IPersistFile 接口的Save()方法。 释放接口 收回COM库 //*/ //#include <windows.h> #include <afxwin.h> #include <afxext.h> // MFC 扩展 #include "wininet.h" // 自己添加(IActiveDesktop需要) #include <afxdtctl.h> // MFC 对 Internet Explorer 4 #include <iostream> using namespace std; void main(void) { WCHAR wszWallpaper [MAX_PATH]; CString strPath; HRESULT hr; IActiveDesktop* pIAD; // 1. 初始化COM库(让Windows加载DLLs)。通常是在程序的InitInstance()中调用 // CoInitialize ( NULL )或其它启动代码。MFC程序使用AfxOleInit()。 CoInitialize ( NULL ); // 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.相同。 wcout << L"Wallpaper path is:\n " << wszWallpaper <<endl << endl; } else { cout << _T("GetWallpaper() failed.") << endl << endl; } // 5. 释放接口。 pIAD->Release(); } else { cout << _T("CoCreateInstance() failed.") << endl << endl; } // 6. 收回COM库。MFC 程序不用这一步,它自动完成。 //CoUninitialize(); CString sWallpaper = wszWallpaper; // 将墙纸路径转换为ANSI IShellLink* pISL; IPersistFile* pIPF; // 1. 初始化COM库(让Windows 加载DLLs). 通常在InitInstance()中调用 // CoInitialize ( NULL )或其它启动代码。MFC 程序使用AfxOleInit() 。 //CoInitialize ( NULL ); // 2. 使用外壳提供的Shell Link组件对象类创建COM对象。. // 第四个参数通知COM 需要什么接口(这里是IShellLink)。 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:\\wallpaper.lnk", FALSE ); // 6a. 释放IPersistFile 接口。 pIPF->Release(); } } // 6. 释放IShellLink 接口。 pISL->Release(); } // 输出错误信息部分这里省略。 // 7. 收回COM 库。MFC 程序不用这一步,它自动完成。 CoUninitialize(); }
相关文章推荐
- 在liunx中创建启动器(window下的快捷方式) && linux下,如何建立一个“关闭屏幕”的启动器 ?
- 一个通过VBA建立某文件快捷方式的例子 (备注)
- “目录2”挂载“目录1”的方法:也就是“目录2”下创建一个“目录1”的快捷方式的方法
- 使用反射建立一个用于生产短信对象的工厂方法
- 简单工厂(Factory)-提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。
- Thread.UnCaughtExceptionHandler接口,为每一个Thread对象创建一个异常处理器
- Linux系统:Ubuntu下如何在桌面创建一个应用程序的“快捷方式”?
- linux下创建文件或文件夹快捷方式一个简单地方法
- 一个apk多个入口,在桌面上创建多个应用图标的桌面快捷方式
- C# 创建一个文件夹快捷方式
- 开机默认设置一个widge在指定的屏幕上和自动在桌面上创建一个应用的快捷方式的方法
- 【COM/ATL】创建Url快捷方式
- 创建线程的第二种方式:实现一个接口Runnable。
- 如何为一个程序建立一个快捷方式
- 采用COM方法 创建应用程序的快捷方式(菜鸟版)
- 在linux里如何建立一个快捷方式,连接到另一个目录
- Windows 中如何创建一个指向某相对路径的快捷方式(即快捷方式的目标路径为某相对路径)
- 创建一个远程桌面连接的快捷方式
- Windows 7如何建立一个FTP的快捷方式
- Windows 7如何建立一个FTP的快捷方式