64,647
社区成员
发帖
与我相关
我的任务
分享
#include < atlconv.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( ''\\'' != *lp ) lp--;
*lp=0;
// 设置 EXE 程序的默认工作目录
psl->SetWorkingDirectory( szWorkPath );
hr = psl->QueryInterface( // 查找持续性文件接口指针
IID_IPersistFile, // 持续性接口 IID
(LPVOID *)&ppf ); // 得到接口指针
if ( SUCCEEDED(hr) )
{
USES_CONVERSION; // 转换为 UNICODE 字符串
ppf->Save( T2COLE( lpszLnk ), TRUE ); // 保存
}
}
if ( ppf ) ppf->Release();
if ( psl ) psl->Release();
::CoUninitialize();
}
void OnXXX()
{
CreateShortcut(
_T("c:\\winnt\\notepad.exe"), // 记事本程序。注意,你的系统是否也是这个目录?
_T("c:\\Documents and Settings\\Administrator\\桌面\\我的记事本.lnk")
);
// 桌面上建立快捷方式(lnk)文件的全路径名。注意,你的系统是否也是这个目录?
// 如果用程序实现寻找桌面的路径,则可以查注册表
// HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
}