------------------------------------------
編程思想:
------------------------------------------
Windows外殼(Shell)的快捷方式是以OLE技術的組件對象模型COM(Component Object Modal)為基礎而設計的。利用COM模型,壹個應用程序可以調用另壹應用程序的某些功能。這方面的技術細節請參閱有關文獻。
在了解了上述基本原理後,創建Windows的快捷方式就比較容易了。首先利用OLE通過調用CoCreateInstance()函數建立壹個IID_IShellLink實例,並同時得到其接口指針。利用這個接口指針可以對其各項屬性進行設置。為了使這些信息以快捷方式的數據文件(*.lnk)格式保存起來,還需要從IID_IShellLink對象取得其IID_IPersistFile接口指針,以便於調用其成員函數Save()保存前面設置的信息。
至於如何刪除快捷方式以及創建和刪除文件夾,則只需要簡單地調用文件操作函數SHFileOperation()就可以了。
另外應該註意,在完成上述操作之後,都要調用SHChangeNotify()函數通知Windows外殼有關變化以使之及時更新其顯示狀態。
//創建快捷方式
BOOL CreateLink (
LPSTR szPath,//快捷方式的目標應用程序名
LPSTR szLink)//快捷方式的數據文件名(*.lnk)
{
HRESULT hres ;
IShellLink * psl ;
IPersistFile* ppf ;
WORD wsz[ MAX_PATH] ;
//創建壹個IShellLink實例
hres = CoCreateInstance( CLSID_ShellLink, NULL,
CLSCTX_INPROC_SERVER, IID_IShellLink,
(void **)&psl) ;
if( FAILED( hres))
return FALSE ;
//設置目標應用程序
psl -> SetPath( szPath) ;
//設置快捷鍵(此處設為Shift+Ctrl+'R')
psl -> SetHotkey( MAKEWORD( 'R',
HOTKEYF_SHIFT |HOTKEYF_CONTROL)) ;
//從IShellLink獲取其IPersistFile接口
//用於保存快捷方式的數據文件 (*.lnk)
hres = psl -> QueryInterface( IID_IPersistFile,
(void**)&ppf) ;
if( FAILED( hres))
return FALSE ;
// 確保數據文件名為ANSI格式
MultiByteToWideChar( CP_ACP, 0, szLink, -1,
wsz, MAX_PATH) ;
//調用IPersistFile::Save
//保存快捷方式的數據文件 (*.lnk)
hres = ppf -> Save( wsz, STGM_READWRITE) ;
//釋放IPersistFile和IShellLink接口
ppf -> Release( ) ;
psl -> Release( ) ;
return TRUE;
}