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

源:如何把程序钉到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[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(TEXT("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);
时间: 2024-10-09 11:01:05

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

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

前言:这段时间还算比较空闲,我准备把过去做过的有些形形色色,甚至有些奇怪的研究总结一下,也许刚好有人用的着也不一定,不枉为之抓耳挠腮的时光和浪费的电力.以前有个客户提出要在RCP程序中添加一个banner栏,研究了很久才搞定.代码是基于eclipse4.3.2的. 先看一下效果预览: 为了添加一个banner栏,我们必须重写RCP程序最外层的layout类,即TrimmedPartLayout.java.这个layout类是用来控制menu,toolbar等最基本的layout布局的.我们写一个

C# WinForm程序中不在任务栏显示的处理方法

在我用c#写一些小程序是总是希望,程序窗体不在任务栏上显示程序的窗体 c# Form提供了一个属性值可以很好的解决这个问题 这个属性就是 ShowInTaskbar 在微软的官方声明格式为: public bool ShowInTaskbar {  get; set; } 及可以通过这个属性来获取或设置一个值 这个属性值的默认值是true 就是要在任务栏上显示窗体,如果我们想不显示就直接在load事件中加上如下语句 this.ShowInTaskbar =false

win10程序最小化后任务栏没有显示的解决方法

通常情况下我们会在电脑打开很多应用程序,当我们暂时不需要使用的时候我们会将它最小化,最小化后会以缩略图的形式出现在任务栏中,等我们有需要的时候再打开就行.但是今天用电脑时发现将程序最小化之后任务栏中却看不到程序的最小化窗口(注意为win10操作系统),这样使用带来非常的不方便,那么为什么会出现这种情况呢?经研究发现出现这种问题主要是由于资源管理器出现问题所引起的,下面为大家介绍解决方法.1.打开任务管理器,右击任务栏选择任务管理器或者同时按下[ctrl+shift+esc]组合键打开:2.找到[

VB程序逆向反汇编常见的函数(修改版)

VB程序逆向常用的函数 1) 数据类型转换: a) __vbaI2Str    将一个字符串转为8 位(1个字节)的数值形式(范围在 0 至 255 之间) 或2 个字节的数值形式(范围在 -32,768 到 32,767 之间). b)__vbaI4Str   将一个字符串转为长整型(4个字节)的数值形式(范围从-2,147,483,6482,147,483,647) c)__vbar4Str  将一个字符串转为单精度单精度浮点型(4个字节)的数值形式 d)__vbar8Str   将一个字符

操作 Windows7 任务栏的快捷方式

目前已经有了可以直接调用的方法.通过 ShellExecute 的 taskbarpin 动词直接实现,如: 1 ShellExecute(NULL, _T("taskbarpin"), 2 _T("C:\\Users\\titilima\\Desktop\\Test.lnk"), 3 NULL, NULL, SW_SHOWNORMAL); Windows 7 发布已经有段时间了,今天的话题正是针对于此——占领 Windows7 的任务栏,将应用程序 pin 到任务

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

配置单个页面导航栏的属性: 就在所要配置页面相对应的json文件中写入以下想要设置的属性: { "navigationBarBackgroundColor": "#ffffff",    "navigationBarTextStyle": "black",    "navigationBarTitleText": "小程序" } 属性只需要放在大括号里面即可,每个属性用逗号隔开. 如果不

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

现在很多的应用程序都有这样一种功能,当用户选择最小化窗口时,窗口不是象平常那样最小化到任务栏上,而是“最小化”成一个任务栏图标.象FoxMail 3.0 NetVampire 3.0等都提供了这样的功能.实现这样的功能实际上并不复杂,在窗口最小化时,窗口会发出WM_SYSCOMMAND消息,你只要需要截取Windows的WM_SYSCOMMAND消息,在窗口最小化时隐藏窗口并调用WindowsAPI函数Shell_NotifyIcon将定义的图标添加到任务栏上,Shell_NotifyIcon的

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

swiper 滑块视图容器. 很多网页的首页都会有一个滚动的图片模块,比如天猫超市首页,滚动着很多优惠活动的图片,用来介绍优惠内容,以及供用户点击快速跳转到相应页面. Swiper不仅可以滚动图片,也可以是文本,以及其他组件,需要灵活应用. 基本的配置包括:是否显示面板指示点.指示点颜色,当前选中的指示点颜色.是否自动切换.自动切换时间间隔.是否垂直滚动等. 详情如下官方文档: 实例:编写新闻阅读列表 示意图: 按照第二篇随笔:初尝小程序2-基本框架,中的工程,进行添加内容. 工程目录结构为:

微信小程序开发之tab导航栏

实现功能: 点击不同的tab导航,筛选数据 UI:   js: data:{ navbar: ['半月维保', '季度维保', '半年维保',"年度维保"],    //count:[0,2,3],                                  //记录不同状态记录的数量    currentTab: 4, } //响应点击导航栏  navbarTap: function (e) {    var that = this;    that.setData({