My colleague went to a conference and all I got was this lousy eco-button
Today I got an eco button from my colleague. It is a hardware button with a green flashing light (is that eco?) which can be connected to your computer. With software installed, your computer will be put in stand-by mode when you press the button.

Because I use my computer the whole day for development, I don’t need an eco-button. I need an build project button for the Visual Studio development environment. A little hack is really easy to make and the result will be a more impressive build routine
Pressing the button (after connecting it to your computer without installing the ecobutton software) will execute the keys command
Windows-Key+R ecobutton ENTER
In my opinion a stupid implementation, because each time you press the button you see a Run dialog, followed by the “ecobutton” text filled in and finished with an enter. But this way it is quite easy to replace ecobutton.exe with your own application (keeping the same name)
So I developed a little console application (maybe a hidden application is even better) which will search my Visual Studio application and send the key command F6 (you can also send CTRL+SHIFT+B).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace WhatDoesThisButtonDo
{
class Program
{
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);
static void Main(string[] args)
{
IntPtr hWnd = IntPtr.Zero;
foreach (var p in Process.GetProcesses())
{
if (p.ProcessName.Equals("devenv")) {
hWnd = p.MainWindowHandle;
break;
}
}
if (hWnd != IntPtr.Zero)
{
SetForegroundWindow(hWnd);
SendKeys.SendWait("{F6}");
}
}
}
}
Explaining the code
When pressing the ecobutton, Visual Studio is not the active application anymore. Therefore I first have to find the window handler (of Visual Studio), make it the active foreground application and send the F6 key. There is a FindWindow method (user32.dll) but this one is based on the caption on the title bar. Because your solution name is part of this caption, the name is not static. To solve this issue I loop through the different processes to find the devenv process (when multiple visual studio’s are running, only one is used in this sample).
The SetForegroundWindow brings Visual Studio to the foreground. The F6 key is sent with SendKeys.SendWait. Instead of the F6 key you can also send the CTRL+SHIFT+B keystrokes by supplying “^+B”
To use this small applicaton, make sure it is called ecobutton.exe and placed within your PATH (otherwise Windows is unable to find it).
For me the Build button is way better than the Eco button version, but probaly you have better/other implementation suggestions what you can do with this hardware device. Please post them as feedback on this blogpost.
Wow, you did some cool stuff with it to make it even more handy! Can you also rewrite the code to make (and bring) a cup of coffee whenever you hit it?
That’s a very cool alternative implementation for the lousy “eco button”! Unfortunately, I already have thrown my eco button into the garbage bin….