Programmatic use of windows search

I recently wanted to add a photo search capability to my Timeline program and discovered that you can open a windows explorer with a custom search. You can also type these searches directly into the address bar in a windows file explorer.

The key is the search-ms protocol. It allows programs (like windows explorer) to directly query the windows search index. The parameters to this command are somewhat obscure, but it is very flexible and it can be used to perform any search that you could perform with the graphical search function in the windows file explorer.

For my application, I wanted to search for all photos that were taken between two dates (the start and end date of an event on my timeline). The idea is to quickly find all the photos that I took on a trip or at an event.

The general syntax for the search-ms command is:

search-ms:query=<query string>&
          crumb=<location and display parameters>&
          syntax=<NQS or AQS(default)>

The query string can be any valid SQL or AQS search. For my application I wanted to query on the date my photo was taken which windows stores as “datetaken” and I wanted to query over a range of dates. Dates have to be in the YYYY-MM-DD format, and a range is specified with “..”.

I used the crumb specifier to target a just the “My Pictures” special folder. To specify a location you put crumb=location:<URL encoded path>. For a special folder you do crumb=location:shell%3a<folder name>.

So my final query string is:


You can type or copy this into your search bar to see all the photos you took in 2015.

From C# you can start a process by giving the name of a file that has a default program association. So launching a file explorer with a custom search is as easy as:

System.Diagnostics.Process.Start("search-ms:query=datetaken:" + 
  Start().ToString("yyyy-MM-dd") + ".." + End().ToString("yyyy-MM-dd") +

Touch Table Castles of Burgundy

I’ve completed a touch-table version of Castles of Burgundy. In the board game, players build up their estate with tiles drawn from a common area. Each turn, players roll two dice and use the results to pick tiles, place tiles or sell goods. Placed tiles give the player victory points, extra actions, or advantages in later turns. Each player manipulates their own estate and only interacts with the other players through competition for the tiles in the center.



Continue reading “Touch Table Castles of Burgundy”

Touch table Concordia

I’ve completed a touch-table version of Concordia. We saw the game at Essen last year. They were promoting the Salsa expansion, but we weren’t familiar with the base game. The game has relatively simple rules but it takes many steps to achieve your goals.


The game was a good candidate for the touch table because is no hidden information, there is a decent amount of setup time and piece twiddling, and I felt like the game could be improved with a real-time scoreboard.

Continue reading “Touch table Concordia”

Card Games

A couple of months ago I started a project to convert some card games for play on the touch table. I started this project because I wanted to convert the card game “Linko”, but I’d also been planning to convert “Turn the Tide”.

I’d done one card game (Wizard) in the Torque engine and I used the web interface to keep player’s card’s on their device. I wanted this implementation to be more generic and support multiple card games.

I planned to use Unity’s built in networking and have the server run on the touch table with an Android application that players would download to their phone to show their hand of cards.

Continue reading “Card Games”

How To: Open the same Unity project twice

When making my first networked game in Unity, I found a way to keep two copies of the same project open at once. Unity will usually only open the same project one time. In a networked application, this means that you either have to build the client or server application, then run as the other side within Unity. Not only is this a hassle, but you can only debug one side of the program at a time.

Being able to have the same project open with two Unity windows allowed me to develop much faster.

The key to having the project open twice is to have two project directories that point to the same source files. A Unity project has three sub-directories: Assets, Library and ProjectSettings. Everything the developer creates goes in Assets and Unity controls the other two directories. So, to have two Unity windows into the same project, you have to create two project directories that share the same Assets directory.

I did this in Windows 10 with Unity 5.3. I’d expect this to work for Windows 7+ and Unity 5.x.

  1. Create your project in Unity. Get everything setup the way you want it. Exit Unity.
  2. Copy the whole project directory: Use the GUI -OR- xcopy /e/h Game GameCopy
  3. Delete the Assets sub-dir In the new project directory: Use the GUI -OR- del /s GameCopy/Assets
  4. Link the original Asset directory to the new directory: (in an elevated command prompt) mklink /j GameCopy/Assets Game/Assets

Now you can bring up one Unit window on the Game project and another on the GameCopy project. Any asset changes (code, scenes, graphics, audio, prefab, etc) that you make in one Unity window will show up in the other Unity. The only thing that isn’t shared are project settings.

Remember that you don’t actually have two copies of your assets. Any changes/additions/deletions in one directory are done to both!

In Linux/Mac, I’d try a soft link first and see if that works. If that fails, make a hard link.

Terra Mystica

I’ve completed a touch table conversion of the board game Terra Mystica. In this game, players lead a faction in a race to terraform and settle the map. Each faction is unique with different costs for building, abilities and desires for terrain type. These differences along with random bonus tiles makes every game different without any luck or hidden information.


Continue reading “Terra Mystica”


Late last year I finished a real-time game for the touch table that I called “Muck”. It is an economic game for two to six players that plays in a half hour. The game is modeled off the board game Brass. I’ve considered converting Brass directly, but it only plays four people, it has hidden information and we really aren’t playing it much anymore.


Continue reading “Muck”

Touch Table Caverna

I’ve finished converting Caverna for the touch table and PC. This was the second game that I’ve made using the Unity engine. It is also my first Unity game that used touch for input and it is probably the largest game that I’ve ever converted. Space was very tight and I spent a lot of time laying out the graphics:

Caverna is a game for one to seven players by Uwe Rosenberg. It is a worker placement game where you manage the farm and cave dwelling for a family of dwarfs. The game is similar to Agricola where the occupations and improvements are replaced with rooms which are available to everyone and there is a new expedition mechanic.

The game is a lot of fun to play, but it takes 30-45 minutes per player and there are lots of pieces to move around. My goal for this conversion was to speed up the play time as much as possible. I’m also hoping that the single player is as much fun as the single player version of Le Havre.

Continue reading “Touch Table Caverna”


I’ve been working on a new software project that I’m going to call “Timeline”. When I first learned C#, I wrote a simpler timeline program that I’ve used to keep track of “big” events like houses, vacations, jobs and projects. After getting the Jawbone fitness tracker, I wanted to add that data to my timeline program.

Instead of just adding that to my existing program, I decided to re-write the program to be more flexible. I wanted to be able to have events with child events and to “tag” people in events instead of having a copy of the event on each person.

The program is complete and I am currently submitting it to freeware sites. I didn’t release my first timeline program because it wasn’t able to handle incorrect inputs and it wasn’t very intuitive to use. I am going to release this version, so I’ve made the program more robust.

Continue reading “Timeline”

Microsoft Windows Text-to-Speech for Unity

I’ve made a wrapper around the Windows-only Microsoft Speech API for use in Unity. The Microsoft Speech API is a Windows COM capability that first appeared in windows Vista. It is an easy way to get text to speech in a windows application.

This post will go through the steps of making the C++ DLL and the C# behavior for Unity. If you don’t care about the “how” and just want to use the plugin skip to the end for the download and usage instructions.

Continue reading “Microsoft Windows Text-to-Speech for Unity”