VC 快捷方式

VC操作Windows快捷方式(自己总结)
二个操作:新建和解析
主要用到的是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接口


#include <stdio.h>
#include <windows.h>

#include <shlobj.h>
#include <stdlib.h>
#include <tchar.h>
#include <shlwapi.h>

#pragma comment(lib, "shell32.lib")

//得到当前桌面路径
BOOL GetDesktopPath(TCHAR *pszDesktopPath)
{
	LPITEMIDLIST  ppidl = NULL; 
	
	if (SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &ppidl) == S_OK)
	{
		BOOL flag =	SHGetPathFromIDList(ppidl, pszDesktopPath);
		CoTaskMemFree(ppidl);
		return flag;
	}

	return FALSE;
}	
//得到快速启动栏的路径
BOOL GetIEQuickLaunchPath(TCHAR *pszIEQueickLaunchPath)
{	
	LPITEMIDLIST  ppidl; 			
	
	if (SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA, &ppidl) == S_OK)
	{
		BOOL flag =	SHGetPathFromIDList(ppidl, pszIEQueickLaunchPath);
		_tcscat(pszIEQueickLaunchPath, L"\\Microsoft\\Internet Explorer\\Quick Launch");
		CoTaskMemFree(ppidl);
		return flag;
	}

	return FALSE;
}
//得到 开始->程序组 的路径
BOOL GetProgramsPath(TCHAR *pszProgramsPath)
{
	LPITEMIDLIST  ppidl; 
	
	if (SHGetSpecialFolderLocation(NULL, CSIDL_PROGRAMS, &ppidl) == S_OK)
	{
		BOOL flag = SHGetPathFromIDList(ppidl, pszProgramsPath);
		CoTaskMemFree(ppidl);
		return flag;
	}

	return FALSE;
}

int main()
{
	TCHAR  szPath[MAX_PATH];
	CoInitialize(NULL);

	GetDesktopPath(szPath);

	_tcscat(szPath,TEXT("Acebyte Utilities"));

	HRESULT hr;
	IShellLink     *pLink;  //IShellLink对象指针
	IPersistFile   *ppf; //IPersisFil对象指针

	//创建IShellLink对象
	hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pLink);
	if (FAILED(hr))
		return FALSE;

	//从IShellLink对象中获取IPersistFile接口
	hr = pLink->QueryInterface(IID_IPersistFile, (void**)&ppf);
	if (FAILED(hr))
	{
		pLink->Release();
		return FALSE;
	}

	pLink->SetPath(TEXT("C:\\Program Files\\Acebyte\\Acebyte Utilities 3\\Acebyte Utilities.exe"));
	pLink->SetHotkey(MAKEWORD(VK_F1,HOTKEYF_ALT));

	pLink->SetDescription(TEXT("打开"));

	ppf->Save(TEXT("C://acebyte.lnk"),TRUE);

	ppf->Release();
	pLink->Release();
	
	CoUninitialize();
	return 0;
}


你可能感兴趣的:(windows,VC,VC,快捷方式)