How to control 2 computers with 1 mouse and keyboard

While looking for a suitable solution on how to control 2 computers with 1 mouse and keyboard, I ended up arriving at Mouse Without Borders.

This is a free program launched out of Microsoft Garage, which is an initiative by Microsoft to allow their own employees to team up across the company and work on side projects after hours.

The software can be downloaded from this link:

I was looking at hardware solutions first, because I wanted something that worked with no lag and close to 100% reliability. Any KVM products I could find on Amazon that didn't cost more than $100 were littered with bad reviews or did not offer the ability to switch control using the mouse/keyboard. I was not interested in having a physical switch to manually change over the control, that seemed like it would get annoying really fast.

So I turned to a software solution, initially trying Synergy and Input Director. Neither were able to properly solve this problem for me. I found Synergy painful to configure and Input Director's mouse lag unusable.

Mouse Without Borders is simple to setup and works well with no mouse lag. It works well on Windows start up, so you don't even have to log on to the machine where the peripherals are plugged in, it just needs to be powered on.

I recommend doing everything you can to make it easier for the program to work well. This includes using a wired connection instead of wireless, turning off UAC, turning off IPv6 from your card, and checking your Windows Firewall settings.

I also mapped the machine name to an IP, in the IP mappings tab. Its not clear if the program explicitly uses the IP mapping instead of the host name but in my experience it is generally faster to refer to things by IP across a local network, so it can't hurt to add it. Of course make sure your IPs are static if you are going to do this, otherwise you will have problems.

How to download private Vimeo videos

Disclaimer: This post does not explain how to circumvent Vimeo's protection to access private videos. You will still need access to the private video you are trying to download, presumably by paying for it.

I paid for access to a video tutorial site and I wanted to archive their video collection to my computer for future viewing. The videos were all embedded from Vimeo and private but fortunately I figured out how to download them .. there are 2 ways:

Sometimes they will embed the .mp4 stream directly, sometimes they will embed the Vimeo window as a browser object. To find out which method is being used, open the page where the video is on and go to View Source ..

Do a search for .mp4 and/or vimeo. If you find a .mp4 link like this:

Then skip the next step, however if you don't find anything ending in .mp4 but instead can only find something like this:

Then click that link (note you have to click the link directly from view source, pasting it into a new browser window will not work) and you should see your video in full screen.

From that page, right click and choose View Source and search for .mp4, you should find multiple links to .mp4 streams. The links will have within the code the 'profile' for example SD or h264, you should also be able to see the width/height of the video. Select the .mp4 link with the quality settings you require.

For the final step, create a .html file with a hyperlink in it and paste your .mp4 link in there.


<a href="">download</a>

Now open that .html file in your web browser and right click 'Save link as ..' and you will be able to save the Vimeo video as an MP4 to your computer.

Alternate Method

I received a ton of emails saying the above method doesn't work, it appears that Vimeo has different ways of delivering and protecting these videos. Fortunately some of these people struggling with the above method sent me the link and login so I was able to figure out how to download those too.

Step 1) Open Google Chrome Developer Tools
Step 2) Click the Elements tab, this will show the code of the page. Expand the body tag and get to the <div id="main">

Follow the below screenshot and expand the lines I have highlighted in red until you get to an .mp4 link.

Step 3) Once you see the .mp4 link, click it and you will see in Chrome the following link, right click this and choose 'Open link in new tab' .. this will open the video in a new tab.

Step 4) Once the video is opened , you can right click it and choose Save Video As .. 

Downloading protected files from a WebBrowser object

When you navigate using the WebBrowser control to a downloadable file, the control gives the standard IE download dialog box. To automate this and download the file programmatically we need to use the HttpWebRequest class. This sends a GET request to the server, we can then save the response stream as a file. One problem is if the website you are downloading from requires a login. As the WebRequest you create is outside of the WebBrowser object, it will not be authenticated so we need to attach the cookies to the request headers. The WebBrowser control doesn't allow you to get HTTPOnly cookies from the page, so we need to implement a workaround to get these cookies. Credit to Microsoft Technet for this code:

[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref uint pcchCookieData, int dwFlags, IntPtr lpReserved);
const int INTERNET_COOKIE_HTTPONLY = 0x00002000;

public static string GetGlobalCookies(string uri)
    uint datasize = 1024;
    StringBuilder cookieData = new StringBuilder((int)datasize);
    if (InternetGetCookieEx(uri, null, cookieData, ref datasize, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero)
        && cookieData.Length > 0)
        return cookieData.ToString();

        return null;

This method GetGlobalCookies allows you to get the cookies you received after logging in with your WebBrowser object and attach them to your WebRequest. To automate the WebRequest, we need to create an Event Handler for the WebBrowser's Navigating event like so:
webBrowser1.Navigating += new WebBrowserNavigatingEventHandler(webBrowser1_Navigating);
In the EventHandler, we first check if the URL has a specific ending. In my example I am looking for torrent files. We then cancel the download dialog and get the cookie string using the GetGlobalCookies method. After that, we create a WebRequest using the URL of the torrent file we are downloading. We then attach the cookies to the header, as well as specify that it's a GET request. The ContentLength = 0 is to overcome 411 errors. We then simply feed the response into a file and you should now have your file downloaded to disk.

void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
    if (e.Url.Segments[e.Url.Segments.Length - 1].EndsWith(".torrent"))
        e.Cancel = true;
        string filepath = filepath = @"C:\Downloads\" + e.Url.Segments[e.Url.Segments.Length - 1];

        string _cookies = GetGlobalCookies("");

        WebRequest wr = HttpWebRequest.Create(e.Url);
        wr.Headers.Add("Cookie", _cookies);
        wr.Method = "GET";
        wr.ContentLength = 0;

        WebResponse resp = wr.GetResponse();

        using (var fileStream = System.IO.File.Create(filepath))

Pointing your domain name to your blog

In order to point your domain name to your blog you need to modify the zone file which can be tricky if you've never done this before and it's very easy to get wrong as I have just learned the last few days!

There are 2 pieces of information you need to provide in your zone file which will have your domain point to your blog:


kqtj3btu4kfq 300 IN CNAME

The kqtj3btu4kfq  tag depends on your blog, you can find in the settings which tag you need to use, the part also depends on your blog, again look in your settings.

www 300 IN CNAME

This is standard for all blogs. VERY IMPORTANT: the trailing . at the end of both addresses is extremely important and without it this will not work.

A records 

@ 300 IN A
@ 300 IN A
@ 300 IN A
@ 300 IN A

These can be set as is, they are standard settings for all blogs

You will need to consult your domain registrar's documentation to find out how to make these changes as well. Once you have made the settings give it about 2-3 hours max for the changes to propagate and your blog should then be working.