Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pin *.lnk file to Windows 7 Taskbar using C#

Even the programmatic pinning of icons in Windows 7 seems it's not permitted (like it says here: http://msdn.microsoft.com/en-us/library/dd378460(v=VS.85).aspx), there are some methods for doing this by using some VB scripts. Someone found a way of doing this in C# like this:

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

     // 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);
            string verbName = verb.Name.Replace(@"&", string.Empty).ToLower();

            if ((pin && verbName.Equals("pin to taskbar")) || (!pin && verbName.Equals("unpin from taskbar")))
            {

                verb.DoIt();
            }
        }

        shellApplication = null;
}

As can be seen, the code makes use of .NET Framework 4.0 features. The question I want to ask is: can this function be transformed so it would make the same thing, but using just 3.5 Framework? Any ideas?

like image 370
movi Avatar asked Jul 29 '11 11:07

movi


People also ask

Can I Pin a specific document to the taskbar?

To pin a document to an application shortcut on the taskbar, select and drag the file to the respective program icon. A small tip will indicate the item will be pinned to the application you selected. So, if you want to pin an Excel document, drag it to the Excel icon on your taskbar.

How do I Pin a File Explorer shortcut to the taskbar?

To do that, launch File Explorer and find the program or shortcut that you want to pin. Right-click or touch and hold it and then select "Pin to taskbar" on the contextual menu. If you want to pin a shortcut to the taskbar for an app or program that's already running, right-click or touch and hold on its taskbar icon.

How do I Pin a specific folder to the taskbar?

If you right click on the Taskbar | Toolbars and check Quick Launch, you can drag a folder to that section of the Taskbar.


1 Answers

Simple...

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

        // create the shell application object
        Shell shellApplication = new ShellClass();

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

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

        FolderItemVerbs verbs = link.Verbs();
        for (int i = 0; i < verbs.Count; i++) {
            FolderItemVerb verb = verbs.Item(i);
            string verbName = verb.Name.Replace(@"&", string.Empty).ToLower();

            if ((pin && verbName.Equals("pin to taskbar")) || (!pin && verbName.Equals("unpin from taskbar"))) {

                verb.DoIt();
            }
        }

        shellApplication = null;
    }

Be sure to add a COM reference to "Microsoft Shell Controls And Automation".

If you want to keep the existing method of using Activator.CreateInstance so you don't have to have the extra COM interop DLL then you'll have to use reflection. But that would make the code a lot uglier.

like image 78
James Johnston Avatar answered Nov 01 '22 14:11

James Johnston