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