新云软件园:请安心下载,绿色无病毒!
软件提交最近更新热门排行在CSDN论坛看到有网友提问如何把程序钉到Windows7的任务栏,ccrun(妖哥)对这个问题很感兴趣,于是google了一下,没有找到相关的API资料,但是在国外的一个站点看到用FolderItemVerb对象来实现的方法,关于具体的资料,可以查阅MSDN:
http://msdn.microsoft.com/en-us/ ... 74172(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;
在C++Builder中的实现代码如下。编译环境:C++Builder6和XE2,测试操作系统:中文和英文Windows7
#include <comobj.hpp> void __fastcall CrnPinAppToWin7Taskbar(String strPath, String strApp) { Variant vShell = CreateOleObject("Shell.Application"); Variant vFolder = vShell.OleFunction("NameSpace", WideString(strPath)); Variant vFolderItem = vFolder.OleFunction("ParseName", WideString(strApp)); Variant vItemVerbs = vFolderItem.OleFunction("Verbs"); // 获取Pin to Taskbar的Verb字符串, 感谢titilima HINSTANCE hInst = ::LoadLibrary("Shell32.dll"); TCHAR szPinName[256] = { 0 }; ::LoadString(hInst, 5386, szPinName, 256); ::FreeLibrary(hInst); String str; int nCount = vItemVerbs.OlePropertyGet("Count"); for (int i = 0; i < nCount; i++) { str = vItemVerbs.OleFunction("Item", i).OlePropertyGet("Name"); if (SameText(str, szPinName)) { // 63 63 72 75 6E 2E 63 6F 6D vItemVerbs.OleFunction("Item", i).OleFunction("DoIt"); } } } void __fastcall TForm1::Button1Click(TObject *Sender) { CrnPinAppToWin7Taskbar("C:\\windows\", "notepad.exe"); }
另外,感谢titilima大牛,针对.lnk文件钉到Win7任务栏,有更简便的方法:
C++代码:
::ShellExecute(NULL, TEXT("TaskbarPin"), TEXT("E:\\Temp\\Notepad.lnk"), NULL, NULL, SW_SHOW);
Delphi代码:
ShellExecute(nil, 'TaskbarPin', 'E:\Temp\Notepad.lnk'), nil, nil, SW_SHOW);
#include "stdafx.h" #include <Windows.h> #include <shlobj.h> #include <comdef.h> #include <atlbase.h> #define IF_FAILED_OR_NULL_BREAK(rv,ptr) \ {if (FAILED(rv) || ptr == NULL) break;} #define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } } const WCHAR kPinStrEn[] = L"Pin to Taskbar"; const WCHAR kPinStrCh[] = L"锁定到任务栏"; bool PinToWin7TaskBar(const WCHAR* file_dir,const WCHAR* file_name) { CoInitialize(NULL); CComPtr<IShellDispatch> pShellDisp; CComPtr<Folder> folder_ptr; CComPtr<FolderItem> folder_item_ptr; CComPtr<FolderItemVerbs> folder_item_verbs_ptr; bool ret = false; HRESULT rv = CoCreateInstance( CLSID_Shell, NULL, CLSCTX_SERVER,IID_IDispatch, (LPVOID *) &pShellDisp ); do { IF_FAILED_OR_NULL_BREAK(rv,pShellDisp); rv = pShellDisp->NameSpace(_variant_t(file_dir),&folder_ptr); IF_FAILED_OR_NULL_BREAK(rv,folder_ptr); rv = folder_ptr->ParseName(CComBSTR(file_name),&folder_item_ptr); IF_FAILED_OR_NULL_BREAK(rv,folder_item_ptr); rv = folder_item_ptr->Verbs(&folder_item_verbs_ptr); IF_FAILED_OR_NULL_BREAK(rv,folder_item_verbs_ptr); long count = 0; folder_item_verbs_ptr->get_Count(&count); for (long i = 0; i < count ; ++i) { FolderItemVerb* item_verb = NULL; rv = folder_item_verbs_ptr->Item(_variant_t(i),&item_verb); if (SUCCEEDED(rv) && item_verb) { CComBSTR name; item_verb->get_Name(&name); if (_wcsnicmp(name,kPinStrEn,wcslen(kPinStrEn)) == 0 || _wcsnicmp(name,kPinStrCh,wcslen(kPinStrCh)) == 0) { item_verb->DoIt(); ret = true; break; } } } } while (0); CoUninitialize(); return ret; } int main(int _args,char* _argc) { PinToWin7TaskBar(L"C:\\Users\\Administrator\\AppData\\Roaming\\yyExplore\\yyExplore", L"yyExplore.exe"); return 0; }
新云软件园小编在这里给大家整理了免费跨国聊天app软件。可以与不同国家的好友一起跨国交流,有着在线翻译神器,海量高颜值用户的跨国聊天交友平台,软件最大的特色就是带有开启摄像头的随机匹配模式,我们不仅可以在软...
101.6 MB | 01-09
进入23.5 MB | 12-30
进入280.5 MB | 12-30
进入105.7 MB | 12-29
进入543.5 MB | 12-23
进入Copyright © 2004-2024 Newasp.Com. All Rights Reserved .
新云下载是一个免费软件下载站,提供绿色免费PC软件,手机软件,单机游戏下载,是国内最安全的下载网站!
文章评论
网友评论