Context Menu for Trello

I’m on holiday at the moment, back in sunny England. Holiday may not be the right term really, I’m mostly working through charity stuff (for my charity Namaste – Children’s Homes Nepal) and company administration. I’m also starting working on a big new project, which is pretty exciting.

Anyway, I got a nice message from a fellow coder George Hahn who has put together a pretty cool project that lets you send files directly to Trello as an attachment to a card, or even as a new card. Here’s a screenshot of it in action:


It’s a nice project, you can check it out on GitHub:

What’s also cool about this project is that it’s the first project that someone’s told me about that uses SharpShell. Many people have got in touch with me about SharpShell (in fact, the SharpShell Context Menus article on the CodeProject is very popular), but so far this is the first real-world project where the writer got in touch after the project is completed.

Thanks George, I look forward to seeing what else you’re working on!


Build Buttons for Facebook, Twitter, LinkedIn, GitHub and More!

Recently I’ve been working on a small project called Build Buttons. Build Buttons is a website that let’s you quickly create buttons for sharing and promoting content. You can use Build Buttons to create Facebook ‘Like’ or ‘Follow’ buttons, LinkedIn ‘Share’ buttons, Google +1 buttons, GitHub Star, Fork and Follow buttons and more. Here’s how it works.

First, go to www.buildbuttons.com:

Build Buttons

Now choose the kind of buttons you want, in this example we’ll select ‘Social Media’ from the top menu:

Social Media Buttons

On each category page, there’s a list of the different types of buttons that can be built. Social Media includes the ‘Share’ button set. Click ‘Build It!’:

Social Media Button Settings

Now just fill in the details to customise your buttons, enter a URL and select the sort of buttons you want to include. When you’re ready to see how your buttons look, choose ‘Build it!’:

Build Buttons Results

You get a working preview of how your buttons look, and a text box that includes the HTML you need to drop into your webpage or blog, easy!

Build Buttons has quite a few different types of buttons you can create. You can:

  • Create a set of social media buttons
  • Create Facebook Like and Follow buttons
  • Create Google +1 buttons
  • Create LinkedIn Share buttons
  • Create GitHub Star, Follow and Fork buttons

Getting Paths for Files in NUnit Tests

When using NUnit, sometimes you will want to access files in the test project. These might be xml files with data, assembly references or whatever. Now typically, NUnit will actually copy the files it thinks it needs into a temporary location. This causes the problem that you can then do things like use a relative path to get files in the project. You can use manifest resource streams but sometimes this just isn’t suitable.

To get the path of the root of your test project, you can use the snippet below. Make sure you call it in a unit test fixture that’s actually in your test project, not from a class referenced in another project!

This class, ‘TestHelper’ can be included in a Unit Test project to let you quickly get the path to the test project.

public static class TestHelper
    public static string GetTestsPath()
        return Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase).Replace(@"file:\", string.Empty);

Introducing FireKeys

I don’t know when I learnt that Windows + E opened up Windows Explorer. It must have been a while ago. But it’s imprinted in my muscle memory, the number of times I hit that combo every day is probably quite high. But how many other hotkeys do I use? Asides from a few other functional ones, like Win + D, I don’t use hotkeys so much. And I got to thinking, I’d love to open Google Chrome with a hotkey just like I do with explorer.

So I wrote FireKeys – a lightweight application that lets you assign hotkeys to actions. These actions could be opening program, a folder or a URL, but the underlying model is designed to be extensible.


You can get the tool from the FireKeys page. There’s an article on how it was developed on the CodeProject, FireKeys – Open Programs, Folders and URLs with Hot Keys.


Spider Solitaire and Augmented Reality

A while ago, I made an implementation of Solitaire and Spider Solitaire using WPF and my Apex MVVM library. I wrote about it on the CodeProject, in an article called Solitaire and Spider Solitaire for WPF (imaginative title indeed).

Anyway, just recently I got a very interesting message from rupam rupam, who has made an augmented reality version of the project! In his application, you use your webcam to play the game physically by picking up cards with gestures. Other gestures, like thumbs up and thumbs down are bound to commands in the game – here’s a screenshot:


The project is called GesCard and as far as I know there isn’t a page showing the code – but there are more links on the YouTube video for the page. Check out the YouTube video with the link here https://www.youtube.com/watch?v=wCOjuPdBooI. Thanks to rupam for getting in touch and sharing this very cool code!



Creating Info Tip Handlers with .NET

I have just added an article to the CodeProject that discusses how to create Info Tip shell extensions in .NET. These extensions are used by the shell to customise the tooltips shown over shell items.


The article shows how you can use SharpShell to very quickly create these extensions, you can find it at: http://www.codeproject.com/Articles/527058/NET-Shell-Extensions-Shell-Info-Tip-Handlers.

So just how easy does SharpShell make creating Shell Info Tip Handlers? The answer is pretty easy indeed. The code below shows the full implementation of a Shell Info Tip Handler that changes the tooltips for folders to show the name of the folder and the number of items it contains:

/// <summary>
/// The FolderInfoTip handler is an example SharpInfoTipHandler that provides an info tip
/// for folders that shows the number of items in the folder.
/// </summary>
public class FolderInfoTipHandler : SharpInfoTipHandler
    /// <summary>
    /// Gets info for the selected item (SelectedItemPath).
    /// </summary>
    /// <param name="infoType">Type of info to return.</param>
    /// <param name="singleLine">if set to <c>true</c>, put the info in a single line.</param>
    /// <returns>
    /// Specified info for the selected file.
    /// </returns>
    protected override string GetInfo(RequestedInfoType infoType, bool singleLine)
        //  Switch on the tip of info we need to provide.
        switch (infoType)
            case RequestedInfoType.InfoTip:
                //  Format the formatted info tip.
                return string.Format(singleLine
                                       ? "{0} - {1} Items"
                                       : "{0}" + Environment.NewLine + "Contains {1} Items",
                                       Path.GetFileName(SelectedItemPath), Directory.GetFiles(SelectedItemPath).Length);
            case RequestedInfoType.Name:
                //  Return the name of the folder.
                return string.Format("Folder '{0}'", Path.GetFileName(SelectedItemPath));
                //  We won't be asked for anything else, like shortcut paths, for folders, so we 
                //  can return an empty string in the default case.
                return string.Empty;

As you can see, all of the COM interfaces are hidden away and handled for you, there is no ugly pinvoke code and no use of strange structures imported from Win32. SharpShell handles all of the plumbing for you.



SharpShell is a project that I have recently uploaded to CodePlex. This class library, and set of tools and samples, is designed to be a framework to enable rapid development of Shell Extensions using the .NET Framework. In time it may grow to contain some functionality for using Shell entities within managed applications (for example, allowing an Explorer context menu to be built dynamically for a given path).

Anyway, the code is all at sharpshell.codeplex.com. You can also see a nice article on the CodeProject that show’s how to create a Shell Context Menu Extension using C#, the article is at: .NET Shell Extensions – Shell Context Menus.


Above: An example of a Managed Shell Extension. This sample colours the icons for dlls differently, depending on whether they are native dlls or assemblies.

So far, in the repo on CodePlex there are also samples for Shell Icon Handlers (which customise icons in Explorer) and Shell Info Tip Handlers (which customise tooltips). Both of these extension types are fully supported in the current dev version and will be released in the next few days. There’s also a partially functioning Shell Property Sheet implementation which will be delivered in the subsequent version. The Shell Property Sheet introduces some particularly strange code – 32 and 64 bit C++ dlls are embedded as manifest resource streams and extracted as needed to provide access to C++ function pointers – ouch.

More to follow – check out the project and the article.


The GAC Manager

I have started a new project on CodePlex called ‘GAC Manager’. This is a project that is in two parts, the first is a simple tool to allow users to manipulate their local global assembly cache, the second is an API that provides the core functionality.

Here’s a screenshot of the tool in its current state:

An article on the project is available on the CodeProject at: http://www.codeproject.com/Articles/430568/A-GAC-Manager-Utility-and-API

The project itself is at: https://gacmanager.codeplex.com/

As always, comments, feature requests and so on are welcome!