创建快捷方式

 

代码
#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();

}

 

 

posted @ 2010-03-19 23:46  独奏者  阅读(266)  评论(1编辑  收藏  举报