创建快捷方式
代码
#include <atlconv.h>
#include <atlcomcli.h>
#include <Windows.h>
#include <ShObjIdl.h>
#include <SHLOBJ.H>
void CreateShortcut(LPCTSTR lpszExe, LPCTSTR lpszLnk)
{
// 建立块捷方式
// 参数 lpszExe: EXE 文件全路径名
// 参数 lpszLnk: 快捷方式文件全路径名
::CoInitialize( NULL );
IShellLink * psl = NULL;
IPersistFile * ppf = NULL;
HRESULT hr = ::CoCreateInstance( // 启动组件
CLSID_ShellLink, // 快捷方式 CLSID
NULL, // 聚合用(注4)
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(); // 窗口尺寸
// 根据 EXE 的文件名,得到目录名
TCHAR szWorkPath[ MAX_PATH ];
::lstrcpy( szWorkPath, lpszExe );
/*LPTSTR lp = szWorkPath;
while( *lp ) lp++;
while( _T('\\') != *lp ) lp--;
*lp=0;*/
// 设置 EXE 程序的默认工作目录
psl->SetWorkingDirectory( szWorkPath );
hr = psl->QueryInterface( // 查找持续性文件接口指针
IID_IPersistFile, // 持续性接口 IID
(LPVOID *)&ppf ); // 得到接口指针
if ( SUCCEEDED(hr) )
{
USES_CONVERSION; // 转换为 UNICODE 字符串
HRESULT hr=ppf->Save( T2COLE( lpszLnk ), TRUE ); // 保存
if (SUCCEEDED(hr) )
{
}
else
{
cout<<"IPersistFile::Save fail!"<<endl;
}
}
else
{
cout<<"QueryInterface IID_IPersistFile fail!"<<endl;
}
}
else
{
cout<<"CoCreateInstance fail!"<<endl;
}
if ( ppf ) ppf->Release();
if ( psl ) psl->Release();
::CoUninitialize();
}
int _tmain(int argc, _TCHAR* argv[])
{
CreateShortcut(
_T("C:\\WINDOWS\\system32\\notepad.exe"),
_T("c:\\Documents and Settings\\XX ZHAO\\桌面\\我的记事本.lnk")
);
cin.get();
}
#include <atlcomcli.h>
#include <Windows.h>
#include <ShObjIdl.h>
#include <SHLOBJ.H>
void CreateShortcut(LPCTSTR lpszExe, LPCTSTR lpszLnk)
{
// 建立块捷方式
// 参数 lpszExe: EXE 文件全路径名
// 参数 lpszLnk: 快捷方式文件全路径名
::CoInitialize( NULL );
IShellLink * psl = NULL;
IPersistFile * ppf = NULL;
HRESULT hr = ::CoCreateInstance( // 启动组件
CLSID_ShellLink, // 快捷方式 CLSID
NULL, // 聚合用(注4)
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(); // 窗口尺寸
// 根据 EXE 的文件名,得到目录名
TCHAR szWorkPath[ MAX_PATH ];
::lstrcpy( szWorkPath, lpszExe );
/*LPTSTR lp = szWorkPath;
while( *lp ) lp++;
while( _T('\\') != *lp ) lp--;
*lp=0;*/
// 设置 EXE 程序的默认工作目录
psl->SetWorkingDirectory( szWorkPath );
hr = psl->QueryInterface( // 查找持续性文件接口指针
IID_IPersistFile, // 持续性接口 IID
(LPVOID *)&ppf ); // 得到接口指针
if ( SUCCEEDED(hr) )
{
USES_CONVERSION; // 转换为 UNICODE 字符串
HRESULT hr=ppf->Save( T2COLE( lpszLnk ), TRUE ); // 保存
if (SUCCEEDED(hr) )
{
}
else
{
cout<<"IPersistFile::Save fail!"<<endl;
}
}
else
{
cout<<"QueryInterface IID_IPersistFile fail!"<<endl;
}
}
else
{
cout<<"CoCreateInstance fail!"<<endl;
}
if ( ppf ) ppf->Release();
if ( psl ) psl->Release();
::CoUninitialize();
}
int _tmain(int argc, _TCHAR* argv[])
{
CreateShortcut(
_T("C:\\WINDOWS\\system32\\notepad.exe"),
_T("c:\\Documents and Settings\\XX ZHAO\\桌面\\我的记事本.lnk")
);
cin.get();
}