在CSDN論壇看到有網友提問如何把程式釘到Windows7的工作列,ccrun(妖哥)對這個問題高度興趣,於是google了一下,沒有找到相關的API資料,但是在國外的一個網站看到用FolderItemVerb對象來實現的方法,關於具體的資料,可以查閱MSDN:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb774172(v=vs.85).aspx
在Delphi中實現的代碼如下。編譯環境:Delphi7和XE2,測試作業系統為中文和英文Windows7
uses ComObj;procedure CrnPinAppToWin7Taskbar(strPath, strApp: string);var vShell, vFolder, vFolderItem, vItemVerbs: Variant; vPath, vApp: Variant; i: Integer; str: String; h: HINST; szPinName: array[0..255] of Char;begin vShell := CreateOleObject('Shell.Application'); vPath := strPath; vFolder := vShell.NameSpace(vPath); vApp := strApp; vFolderItem := vFolder.ParseName(vApp); vItemVerbs := vFolderItem.Verbs; h := LoadLibrary('Shell32.dll'); LoadString(h, 5386, szPinName, 256); FreeLibrary(h); for i := 1 to vItemVerbs.Count do begin str := vItemVerbs.Item(i).Name; if SameText(str, szPinName) then begin // 63 63 72 75 6E 2E 63 6F 6D vItemVerbs.Item(i).DoIt; end; end;end;procedure TForm1.Button1Click(Sender: TObject);begin CrnPinAppToWin7Taskbar('C:\windows', 'regedit.exe');end;
另外,感謝titilima大牛,針對.lnk檔案釘到Win7工作列,有更簡便的方法:
ShellExecute(nil, 'TaskbarPin', 'E:\Temp\Notepad.lnk'), nil, nil, SW_SHOW);
本文轉自:http://blog.csdn.net/ccrun/article/details/6906471