デスクトップにショートカットを作成

2494 ワード

回転:http://www.vckbase.com
 
コードを読む前に、「ショートカット」コンポーネントの構成図を見てください. 図2、ショートカットコンポーネントのインターフェース構造概略図は、構造図から分かるように、「ショートカット方式」コンポーネント(CLSIDuShellLink)は、3つのインターフェースがあり、各インターフェースは関連機能のセットの関数を完成する.IShelllinkインターフェースは、ショートカット方式のパラメータ読み書き機能(図3参照)を提供し、IPersistFileインターフェース(IID_IPersistFile)は、ショートカット方式の持続性ファイルの読み書き機能を提供する.オブジェクトの持続性(注5)は、非常によく使用され、強力なインターフェースファミリーです.しかし、今日はこの二つの関数を知るだけでいいです.IPersistFile::Save()とIPersistFile:Load()です.(注6) 図3、ショートカットの各種属性
#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
}