Windows 7 - 任务栏 - 固定或取消固定程序链接

时间:2009-12-28 05:46:41

标签: winapi windows-7

与标题一样,是否有任何Win32 API可以做到这一点?

8 个答案:

答案 0 :(得分:16)

不要这样做。

我99%确定没有正式的API,原因与没有programmatic access to the old Start Menu's pin list完全相同。

简而言之,大多数用户不希望程序在他们的收藏夹,快速启动,任务栏等中放入垃圾,因此Windows不支持您这样做。

答案 1 :(得分:7)

我正在尝试实现一个VirtuaWin (opensource virtual desktop software)插件,允许我将不同的按钮固定到不同的虚拟桌面。完全有效的理由使用它。

找到了固定它的方法:

以下代码段取自Chromium shortcut.cc file,几乎未更改,另请参阅ShellExecute function at the MSDN

bool TaskbarPinShortcutLink(const wchar_t* shortcut) {
  int result = reinterpret_cast<int>(ShellExecute(NULL, L"taskbarpin", shortcut,
      NULL, NULL, 0));
  return result > 32;
}

bool TaskbarUnpinShortcutLink(const wchar_t* shortcut) {
  int result = reinterpret_cast<int>(ShellExecute(NULL, L"taskbarunpin",
      shortcut, NULL, NULL, 0));
  return result > 32;
}    
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

如果您知道快捷方式,似乎非常简单。对我而言,虽然这还不够,但我还需要迭代现有的按钮,并在不同的桌面上取消固定并重新打印它们。

答案 2 :(得分:3)

您可以通过Windows Shell动词固定/取消固定应用程序:
http://blogs.technet.com/deploymentguys/archive/2009/04/08/pin-items-to-the-start-menu-or-windows-7-taskbar-via-script.aspx

对于API,有一个脚本友好的COM库,用于使用Shell:
http://msdn.microsoft.com/en-us/library/bb776890%28VS.85%29.aspx

以下是用JScript编写的示例:

// Warning: untested and probably needs correction
var appFolder = "FOLDER CONTAINING THE APP/SHORTCUT";
var appToPin = "FILENAME OF APP/SHORTCUT";
var shell = new ActiveXObject("Shell.Application");
var folder = shell.NameSpace(appFolder);
var folderItem = folder.ParseName(appToPin);
var itemVerbs = folderItem.Verbs;
for(var i = 0; i < itemVerbs.Count; i++)
{
    // You have to find the verb by name,
    //  so if you want to support multiple cultures,
    //  you have to match against the verb text for each culture.
    if(itemVerbs[i].name.Replace(/&/, "") == "Pin to Start Menu")
    {
        itemVerbs[i].DoIt();
    }
}

答案 3 :(得分:2)

Code Project article的评论中,它说你所要做的就是在文件夹“C:\ Users \ Username \ AppData \ Roaming \ Microsoft \ Internet Explorer \ Quick Launch \ User Pinned”中创建一个符号链接\任务”。

但它似乎通常是不合情理的做法,正如其他评论所指出的那样。

答案 4 :(得分:1)

我发现没有正式的API可以做到这一点,但有人通过VBScript做到了。 http://blog.ananthonline.net/?p=37 感谢。

答案 5 :(得分:1)

只是为了在信息上添加一些链接,因为微软现在提供关于“Taskbar Extensions”的官方文档:

  

固定了一小组应用程序   默认情况下,用于新安装。   除此之外,只有用户才可以   进一步应用;的编程   由应用程序固定不是   允许的。

所以 Kevin Montrose 答案是正确答案:不要。

答案 6 :(得分:1)

它有效,但不适用于所有操作系统,例如Windows 10:

    [DllImport("kernel32.dll")]
    private static extern IntPtr LoadLibrary(string dllName);
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    static extern int LoadString(IntPtr hInstance, uint uID, StringBuilder lpBuffer, int nBufferMax);

    private static void PinUnpinTaskBar(string filePath, bool pin)
    {
        if (!File.Exists(filePath))
            throw new FileNotFoundException(filePath + " not exists!");

        int MAX_PATH = 255;
        var actionIndex = pin ? 5386 : 5387; // 5386 is the DLL index for"Pin to Tas&kbar", ref. http://www.win7dll.info/shell32_dll.html
        StringBuilder szPinToStartLocalized = new StringBuilder(MAX_PATH);
        IntPtr hShell32 = LoadLibrary("Shell32.dll");
        LoadString(hShell32, (uint)actionIndex, szPinToStartLocalized, MAX_PATH);
        string localizedVerb = szPinToStartLocalized.ToString();

        // create the shell application object
        dynamic shellApplication = Activator.CreateInstance(Type.GetTypeFromProgID("Shell.Application"));

        string path = Path.GetDirectoryName(filePath);
        string fileName = Path.GetFileName(filePath);

        dynamic directory = shellApplication.NameSpace(path);
        dynamic link = directory.ParseName(fileName);

        dynamic verbs = link.Verbs();
        for (int i = 0; i < verbs.Count(); i++)
        {
            dynamic verb = verbs.Item(i);

            if ((pin && verb.Name.Equals(localizedVerb)) || (!pin && verb.Name.Contains(localizedVerb)))
            {
                verb.DoIt();
                break;
            }
        }
    }

答案 7 :(得分:0)

此文件夹包含固定应用程序的快捷方式

C:\ Users \ Your-User-Name \ AppData \ Roaming \ Microsoft \ Internet Explorer \ Quick Launch \ User Pinned \ TaskBar