源:如何把程序钉到Windows7任务栏(修正版)

在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[..] 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, , szPinName, );
FreeLibrary(h); for i := 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(TEXT("Shell32.dll")); TCHAR szPinName[] = { };
::LoadString(hInst, , szPinName, ); ::FreeLibrary(hInst); String str; int nCount = vItemVerbs.OlePropertyGet("Count");
for (int i = ; 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);

如何把程序钉到Windows7任务栏(修正版)的更多相关文章

  1. 如何在RCP程序中添加一个banner栏

    前言:这段时间还算比较空闲,我准备把过去做过的有些形形色色,甚至有些奇怪的研究总结一下,也许刚好有人用的着也不一定,不枉为之抓耳挠腮的时光和浪费的电力.以前有个客户提出要在RCP程序中添加一个bann ...

  2. C# 设置程序最小化到任务栏右下角,鼠标左键单击还原,右键提示关闭程序

    首先设置程序最小化到任务栏右下角 先给窗口添加一个notifyIcon控件 为notifyIcon控件设置ICO图标(不设置图标将无法在任务栏显示) 给notifyIcon控件添加点击事件 然后是最小 ...

  3. uniapp 小程序 flex布局 v-for 4栏展示

    注:本项目的图片资源来源于后端接口,所以使用的是v-for. 关键词:uniapp 小程序 flex布局 v-for 4栏展示 自适应 <view style="display: fl ...

  4. Android群英传帝落篇——程序人生,路漫漫其修远兮,吾将上下而求索!

    Android群英传帝落篇--程序人生,路漫漫其修远兮,吾将上下而求索! 当写这篇博客的时候,自2016-02-22到现在5.2号,一晃眼,也㓟两个多月就过去了,我才将这本书看完,虽然写笔记花了很大的 ...

  5. delphi如何让程序最小化到任务栏(转)

    现在很多的应用程序都有这样一种功能,当用户选择最小化窗口时,窗口不是象平常那样最小化到任务栏上,而是“最小化”成一个任务栏图标.象FoxMail 3.0 NetVampire 3.0等都提供了这样的功 ...

  6. Delphi如何让程序最小化到任务栏(截取WM_SYSCOMMAND后,调用Shell_NotifyIcon)

    现在很多的应用程序都有这样一种功能,当用户选择最小化窗口时,窗口不是象平常那样最小化到任务栏上,而是“最小化”成一个任务栏图标.象FoxMail 3.0 NetVampire 3.0等都提供了这样的功 ...

  7. 小程序配置单个页面导航栏的属性(微信小程序交流群:604788754)

    配置单个页面导航栏的属性: 就在所要配置页面相对应的json文件中写入以下想要设置的属性: { "navigationBarBackgroundColor": "#fff ...

  8. 初尝微信小程序2-Swiper组件、导航栏标题配置

    swiper 滑块视图容器. 很多网页的首页都会有一个滚动的图片模块,比如天猫超市首页,滚动着很多优惠活动的图片,用来介绍优惠内容,以及供用户点击快速跳转到相应页面. Swiper不仅可以滚动图片,也 ...

  9. delphi如何让程序最小化到任务栏(使用Shell_NotifyIcon API函数)

    现在很多的应用程序都有这样一种功能,当用户选择最小化窗口时,窗口不是象平常那样最小化到任务栏上,而是“最小化”成一个任务栏图标.象FoxMail 3.0 NetVampire 3.0等都提供了这样的功 ...

随机推荐

  1. windows下使用git管理github项目

    1. 下载安装msysgithttp://code.google.com/p/msysgit/downloads/list2. 注册github账号3. 生成ssh公钥和私钥ssh-keygen -C ...

  2. JavaScript 常用功能实现一览(一)

    摘自于网络:http://www.cnblogs.com/joinger/articles/1506482.html 适合阅读范围:对JavaScript一无所知-离精通只差一步之遥的人基础知识:HT ...

  3. slf4j(simple logging facade for java)

    http://www.tuicool.com/articles/IfeUfq   slf4j(simple logging facade for java)是Java的简单的日志门面,它 不是具体的日 ...

  4. coco2d-x CCDirector.h文件中变量*m_pNotificationNode*

    1.在CCDiretor.h中有如下说明 /** This object will be visited after the main scene is visited. This object MU ...

  5. 解决centos无法上传文件和打开文件夹

    使用yum搭建了ftp服务..yum的使用参考:http://blog.csdn.net/enson16855/article/details/9140623 windows使用FileZilla连接 ...

  6. selenium2.0集成测试案例

    webDriver模拟点击对web工程测试还是挺方便的. package suite; import java.util.concurrent.TimeUnit; import org.junit.A ...

  7. CDockablePane使用总结

    基于 http://blog.csdn.net/kikaylee/article/details/8936953 CDockablePane的基本布局和用法 新建一个SDI工程,在CMainFrame ...

  8. scala模式匹配与样例类

    样本类:添加了case的类便是样本类.这种修饰符可以让Scala编译器自动为这个类添加一些语法上的便捷设定.如下: 1.添加与类名一致的工厂方法.也就是说,可以写成Var("x") ...

  9. CodeForces 567B Berland National Library

    Description Berland National Library has recently been built in the capital of Berland. In addition, ...

  10. PAT (Advanced Level) 1102. Invert a Binary Tree (25)

    简单题. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #in ...