VC操做Windows快捷方式(本身總結) 二個操做:新建和解析 主要用到的是COM組件。IShellLink和IPersistFile 須要添加的頭函數 shobjidl.h IPersistFile主要用到兩個成員函數: 一、Save。保存內容到文件中去 二、Load。讀取 Load的函數原型 HRESULT Load( LPCOLSTR pszFileName, //快捷方式的文件名,應該是ANSI字符 DWORD dwMode //讀取方式 ); dwMode可取以下值: STGM_READ:只讀 STGM_WRITE:只寫 STGM_READWRITE:讀寫 IShellLink主要成員: 一、GetArguments:得到參數信息 二、GetDescription:得到描述信息(備註行) 三、GetHotkey:得到快捷鍵 四、GetIconLocation:得到圖標 五、GetIDList:得到快捷方式的目標對象的item identifier list (Windows外殼中的每一個對象如文件,目錄和打印機等都有惟一的item identifiler list) 六、GetPath: 得到快捷方式的目標文件或目錄的全路徑 七、GetShowCmd:得到快捷方式的運行方式,好比常規窗口,最大化 八、GetWorkingDirectory:得到工做目錄 九、Resolve:按照必定的搜索規則試圖得到目標對象,即便目標對象已經被刪除或移動,重命名 下面是對應信息的設置方法 十、SetArguments 十一、SetDescription 十二、SetHotkey 1三、SetIconLocation 1四、SetIDList 1五、SetPath 1六、SetRelativePat 1七、SetShowCmd 1八、SetWorkingDirectory 通常狀況操做以下: 1、初始化COM接口 2、建立IShellLink對象 3、從IShellLink對象中獲取IPersistFile對象接口 4、操做IShellLink對象 5、釋放IPersistFile對象接口 6、釋放IShellLink對象 7、釋放COM接口 示例代碼: /* 注:在桌面上建立快捷方式,快捷方式的名稱爲"VC建立的快捷方式",快捷方式指向應用程序"c:\aa.exe" 快捷方式的快捷鍵:無 快捷方式的工做目錄:c:\ 快捷方式的備註:VC寫寫捷方式 快捷方式的運行方式:常規窗口 */ HRESULT hRet; IShellLink *pLink; //IShellLink對象指針 IPersistFile * ppf; //IPersisFil對象指針 WCHAR wsz[MAX_PATH]; //定義Unicode字符串 //初始化COM庫 hRet = ::CoInitialize(NULL); if ( hRet != S_OK) //初始化COM庫失敗,直接返回 { AfxMessageBox("初始化COM庫失敗"); return; } //建立IShellLink實例 hRet = ::CoCreateInstance(CLSID_ShellLink,NULL,CLSCTX_INPROC_SERVER,IID_IShellLink,(void**)&pLink); if ( hRet != S_ok) { AfxMessageBox("建立IShellLink實例失敗"); } else { //建立IShellLink實例成功,繼續操做 //從IShellLink對象中獲取IPersistFile接口 hRet = pLink->QueryInterface(IID_IpersistFile,(void**)&ppf); if ( hRet != S_OK) { AfxMessageBox("獲取IPersistFile接口失敗"); } else { //獲取接口成功,繼續操做 //設置快捷方式中的程序路徑 pLink->SetPath("c:\\aa.exe"); //設置快捷方式的工做目錄 pLink->SetWorkingDirectory("c:\\"); //確保快捷方式路徑由ANSI字符串組成 MultiByteToWideChar( CP_ACP, 0, "C:\\Documents and Settings\\hjs\\桌面[url=file://\\vc]\\vc[/url]建立的快捷方式.lnk", -1, wsz, MAX_PATH ); //保存快捷方式 ppf->Save(wsz,TRUE); } } //釋放IPersistFile接口 ppf->Release(); //釋放IShellLink對象 pLink->Release(); //釋放COM接口 ::CoUninitialize();