如何把程序钉到Windows7任务栏

转自:http://blog.csdn.net/ccrun/article/details/6906471

在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

  1. uses ComObj;  
  2.   
  3. procedure CrnPinAppToWin7Taskbar(strPath, strApp: string);  
  4. var  
  5.   vShell, vFolder, vFolderItem, vItemVerbs: Variant;  
  6.   vPath, vApp: Variant;  
  7.   i: Integer;  
  8.   str: String;  
  9.   h: HINST;  
  10.   szPinName: array[0..255of Char;  
  11. begin  
  12.   vShell := CreateOleObject('Shell.Application');  
  13.   vPath := strPath;  
  14.   vFolder := vShell.NameSpace(vPath);  
  15.   vApp := strApp;  
  16.   vFolderItem := vFolder.ParseName(vApp);  
  17.   vItemVerbs := vFolderItem.Verbs;  
  18.   
  19.   h := LoadLibrary('Shell32.dll');  
  20.   LoadString(h, 5386, szPinName, 256);  
  21.   FreeLibrary(h);  
  22.   
  23.   for i := 1 to vItemVerbs.Count do  
  24.   begin  
  25.     str := vItemVerbs.Item(i).Name;  
  26.   
  27.     if SameText(str, szPinName) then  
  28.     begin  
  29.       // 63 63 72 75 6E 2E 63 6F 6D  
  30.       vItemVerbs.Item(i).DoIt;  
  31.     end;  
  32.   end;  
  33. end;  
  34.   
  35. procedure TForm1.Button1Click(Sender: TObject);  
  36. begin  
  37.   CrnPinAppToWin7Taskbar('C:\windows''regedit.exe');  
  38. end;  


在C++Builder中的实现代码如下。编译环境:C++Builder6和XE2,测试操作系统:中文和英文Windows7

  1. #include <comobj.hpp>  
  2.   
  3. void __fastcall CrnPinAppToWin7Taskbar(String strPath, String strApp)  
  4. {  
  5.     Variant vShell = CreateOleObject("Shell.Application");  
  6.     Variant vFolder = vShell.OleFunction("NameSpace", WideString(strPath));  
  7.     Variant vFolderItem = vFolder.OleFunction("ParseName", WideString(strApp));  
  8.     Variant vItemVerbs = vFolderItem.OleFunction("Verbs");  
  9.   
  10.     // 获取Pin to Taskbar的Verb字符串, 感谢titilima  
  11.     HINSTANCE hInst = ::LoadLibrary("Shell32.dll");  
  12.   
  13.     TCHAR szPinName[256] = { 0 };  
  14.     ::LoadString(hInst, 5386, szPinName, 256);  
  15.   
  16.     ::FreeLibrary(hInst);  
  17.   
  18.     String str;  
  19.   
  20.     int nCount = vItemVerbs.OlePropertyGet("Count");  
  21.     for (int i = 0; i < nCount; i++)  
  22.     {  
  23.         str = vItemVerbs.OleFunction("Item", i).OlePropertyGet("Name");  
  24.   
  25.         if (SameText(str, szPinName))  
  26.         {  
  27.             // 63 63 72 75 6E 2E 63 6F 6D  
  28.             vItemVerbs.OleFunction("Item", i).OleFunction("DoIt");  
  29.         }  
  30.     }  
  31. }  
  32.   
  33. void __fastcall TForm1::Button1Click(TObject *Sender)  
  34. {  
  35.     CrnPinAppToWin7Taskbar("C:\\windows\\", "notepad.exe");  
  36. }  


另外,感谢titilima大牛,针对.lnk文件钉到Win7任务栏,有更简便的方法:

C++代码:

  1. ::ShellExecute(NULL, TEXT("TaskbarPin"), TEXT("E:\\Temp\\Notepad.lnk"), NULL, NULL, SW_SHOW);  

Delphi代码:

  1. ShellExecute(nil'TaskbarPin''E:\Temp\Notepad.lnk'), nilnil, SW_SHOW);  

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值