<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://windowscoding.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Blake Niemyjski : VB.Net, C#</title><link>http://windowscoding.com/blogs/blake/archive/tags/VB.Net/C_2300_/default.aspx</link><description>Tags: VB.Net, C#</description><dc:language>en</dc:language><generator>CommunityServer 2008 SP1 (Build: 30619.63)</generator><item><title>How to register a keyboard shortcut (hot key) in a .NET Windows Forms Application.</title><link>http://windowscoding.com/blogs/blake/archive/2009/05/19/how-to-register-a-keyboard-shortcut-hot-key-in-a-net-windows-forms-application.aspx</link><pubDate>Tue, 19 May 2009 15:00:00 GMT</pubDate><guid isPermaLink="false">6b5532e6-57ca-4170-9999-8460b2d28065:390</guid><dc:creator>Blake Niemyjski</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://windowscoding.com/blogs/blake/rsscomments.aspx?PostID=390</wfw:commentRss><comments>http://windowscoding.com/blogs/blake/archive/2009/05/19/how-to-register-a-keyboard-shortcut-hot-key-in-a-net-windows-forms-application.aspx#comments</comments><description>&lt;p&gt;There may come a time when you want to implement some extra features or maybe an Easter egg into your application using keyboard shortcuts. I was recently tasked with creating an Easter egg so we could test some functionality in CodeSmith. After countless searches looking for an elegant solution (I found a few ugly solutions and some nicer ones) I came across Method #3. I’ll First touch on the one I didn’t choose to go with.&lt;/p&gt;  &lt;h3&gt;Method #1&lt;/h3&gt;  &lt;p&gt;The following code block will make an unmanaged call to the user32.dll to register the hotkey. I would never go this approach, but if you were like me and couldn’t find anything in the time frame allotted then you might end up implementing this.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;First you will need to update your using block.&lt;/p&gt;  &lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Runtime.InteropServices;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Then add the following code to your form.&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#008000;"&gt;/// &amp;lt;summary&amp;gt; The RegisterHotKey function defines a system-wide hot key &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#008000;"&gt;/// &amp;lt;param name=&amp;quot;hWnd&amp;quot;&amp;gt;Handle to the window that will receive WM_HOTKEY messages&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#008000;"&gt;/// generated by the hot key.&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#008000;"&gt;/// &amp;lt;param name=&amp;quot;id&amp;quot;&amp;gt;Specifies the identifier of the hot key.&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#008000;"&gt;/// &amp;lt;param name=&amp;quot;fsModifiers&amp;quot;&amp;gt;Specifies keys that must be pressed in combination with the key&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#008000;"&gt;/// specified by the &amp;#39;virtualKey&amp;#39; parameter in order to generate the WM_HOTKEY message.&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#008000;"&gt;/// &amp;lt;param name=&amp;quot;virtualKey&amp;quot;&amp;gt;Specifies the virtual-key code of the hot key&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#008000;"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;c&amp;gt;true&amp;lt;/c&amp;gt; if the function succeeds, otherwise &amp;lt;c&amp;gt;false&amp;lt;/c&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#008000;"&gt;/// &amp;lt;seealso cref=&amp;quot;http://msdn.microsoft.com/en-us/library/ms646309(VS.85).aspx&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;[DllImport(&lt;span style="color:#006080;"&gt;&amp;quot;user32.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;[&lt;span style="color:#0000ff;"&gt;return&lt;/span&gt;: MarshalAs(UnmanagedType.Bool)]&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; RegisterHotKey(IntPtr hWnd, &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; id, &lt;span style="color:#0000ff;"&gt;uint&lt;/span&gt; fsModifiers, &lt;span style="color:#0000ff;"&gt;uint&lt;/span&gt; virtualKey);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;[DllImport(&lt;span style="color:#006080;"&gt;&amp;quot;user32.dll&amp;quot;&lt;/span&gt;)]&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; UnregisterHotKey(IntPtr hWnd, &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; id);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; MOD_CONTROL = 0x2;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; MOD_SHIFT = 0x4;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; WM_HOTKEY = 0x312;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; keyId;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; RegisterHotKey(Form f, Keys key)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; modifiers = 0;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; ((key &amp;amp; Keys.Control) == Keys.Control)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;       modifiers = modifiers | MOD_CONTROL;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; ((key &amp;amp; Keys.Shift) == Keys.Shift)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;       modifiers = modifiers | MOD_SHIFT;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   Keys k = key &amp;amp; ~Keys.Control &amp;amp; ~Keys.Shift;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   Func&amp;lt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&amp;gt; ff = () =&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                       {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                           keyId = f.GetHashCode();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                           RegisterHotKey(f.Handle, keyId, (&lt;span style="color:#0000ff;"&gt;uint&lt;/span&gt;) modifiers, (&lt;span style="color:#0000ff;"&gt;uint&lt;/span&gt;) k);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                           &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                       };&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (f.InvokeRequired)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;       f.Invoke(ff);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;       ff();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; UnregisterHotKey(Form f)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   &lt;span style="color:#0000ff;"&gt;try&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;       Func&amp;lt;&lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt;&amp;gt; ff = () =&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                           {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                               UnregisterHotKey(f.Handle, keyId);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                               &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;                           };&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;       &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (f.InvokeRequired)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;           f.Invoke(ff);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;       &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;           ff();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   &lt;span style="color:#0000ff;"&gt;catch&lt;/span&gt; (Exception ex)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;       Debug.WriteLine(ex.ToString());&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; WndProc(&lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; Message m)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   &lt;span style="color:#0000ff;"&gt;base&lt;/span&gt;.WndProc(&lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; m);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (m.Msg == WM_HOTKEY)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;       &lt;span style="color:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Exception(&lt;span style="color:#006080;"&gt;&amp;quot;You found an Easter Egg.&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Then in your Form Load event add the following code.&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;Keys k = Keys.F2 | Keys.Control;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;RegisterHotKey(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;, k);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;I found this example &lt;a href="http://www.pinvoke.net/default.aspx/user32/RegisterHotKey.html" target="_blank"&gt;here&lt;/a&gt;, Please note that I did some refactoring to it.&lt;/p&gt;

&lt;h3&gt;Method #2&lt;/h3&gt;

&lt;p&gt;I also found this &lt;a href="http://stackoverflow.com/questions/48935/c-using-wpf-and-net-35-how-can-i-register-a-global-hot-key-to-say-ctrlshiftlett" target="_blank"&gt;WPF solution&lt;/a&gt; that I haven’t tried but should work. This looks like the best approach for implementing this functionality in WPF as I have seen people use the first method.&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; WindowMain()&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;{  &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   InitializeComponent();     &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.InputBindings.Add(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; InputBinding(MyAppCommands.SaveAll, &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; KeyGesture(Key.F2, ModifierKeys.Control)););&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   CommandBinding cb = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; CommandBinding(MyAppCommands.SaveAll);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   cb.Executed += SaveAllDocuments;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;   &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.CommandBindings.Add(cb );&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; SaveAllDocuments(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; obSender, ExecutedRoutedEventArgs e)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Method #3&lt;/h3&gt;

&lt;p&gt;The approach I went I thought was the best way as it is small and elegant piece of code. It is completely safe to implement as it doesn’t have any hooks into native windows dlls. The initial idea came from &lt;a href="http://www.codeguru.com/csharp/.net/net_general/keyboard/article.php/c4639" target="_blank"&gt;here&lt;/a&gt;, to implement this code just place it anywhere in your Form.&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; ProcessCmdKey(&lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; Message message, Keys keys)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;switch&lt;/span&gt; (keys)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;        &lt;span style="color:#0000ff;"&gt;case&lt;/span&gt; Keys.F2 | Keys.Control:&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#008000;"&gt;//Process action here.&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;            &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;    &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Method #4&lt;/h3&gt;

&lt;p&gt;A &lt;a href="http://erikej.blogspot.com/" target="_blank"&gt;friend&lt;/a&gt; recently sent me &lt;a href="http://www.syncfusion.com/FAQ/windowsforms/faq_c46c.aspx" target="_blank"&gt;this example&lt;/a&gt; right before publishing this. I have never seen this approach but never the less it is an example of how to implement this functionality.&lt;/p&gt;

&lt;h5&gt;C#&lt;/h5&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; MyMainForm : System.Windows.Forms.Form, IMessageFilter&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;{&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     &lt;span style="color:#0000ff;"&gt;const&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; WM_KEYDOWN = 0x100;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     &lt;span style="color:#0000ff;"&gt;const&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; WM_KEYUP = 0x101;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; PreFilterMessage(&lt;span style="color:#0000ff;"&gt;ref&lt;/span&gt; Message m)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;          Keys keyCode = (Keys)(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt;)m.WParam &amp;amp; Keys.KeyCode;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;          &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(m.Msg == WM_KEYDOWN &amp;amp;&amp;amp; keyCode == Keys.Escape)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;          {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;               Console.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;Ignoring Escape...&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;               &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;          }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;          &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; MyMainForm_Load(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, System.EventArgs e)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;          Application.AddMessageFilter(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;h5&gt;VB.NET&lt;/h5&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt; MyMainForm&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     &lt;span style="color:#0000ff;"&gt;Inherits&lt;/span&gt; System.Windows.Forms.Form&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     &lt;span style="color:#0000ff;"&gt;Implements&lt;/span&gt; IMessageFilter&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; WM_KEYDOWN &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; = &amp;amp;H100&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; WM_KEYUP &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Integer&lt;/span&gt; = &amp;amp;H101&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt; PreFilterMessage(&lt;span style="color:#0000ff;"&gt;ByRef&lt;/span&gt; m &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; Message) &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Boolean&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;          &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; keyCode &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; Keys = &lt;span style="color:#0000ff;"&gt;CType&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;CInt&lt;/span&gt;(m.WParam), Keys) &lt;span style="color:#0000ff;"&gt;And&lt;/span&gt; Keys.KeyCode&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;          &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; m.Msg = WM_KEYDOWN &lt;span style="color:#0000ff;"&gt;And&lt;/span&gt; keyCode = Keys.Escape &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;               Console.WriteLine(&lt;span style="color:#006080;"&gt;&amp;quot;Ignoring Escape...&amp;quot;&lt;/span&gt;)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;               &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;True&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;          &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;          &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;False&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt; &lt;span style="color:#008000;"&gt;&amp;#39;PreFilterMessage&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&amp;#160;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     &lt;span style="color:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; MyMainForm_Load(sender &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Object&lt;/span&gt;, e &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; System.EventArgs)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;          Application.AddMessageFilter(&lt;span style="color:#0000ff;"&gt;Me&lt;/span&gt;)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;     &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; &lt;span style="color:#008000;"&gt;&amp;#39;MyMainForm_Load&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt; &amp;#39;MyMainForm&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Please let me know if you find any issues in the sample code above.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://windowscoding.com/aggbug.aspx?PostID=390" width="1" height="1"&gt;</description><category domain="http://windowscoding.com/blogs/blake/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/.Net/default.aspx">.Net</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/VB.Net/default.aspx">VB.Net</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/WPF/default.aspx">WPF</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/how-to/default.aspx">how-to</category></item><item><title>Microsoft's 2008 Lang.NET Symposium Videos</title><link>http://windowscoding.com/blogs/blake/archive/2008/02/24/2008-lang-net-symposium-videos.aspx</link><pubDate>Mon, 25 Feb 2008 04:32:00 GMT</pubDate><guid isPermaLink="false">6b5532e6-57ca-4170-9999-8460b2d28065:280</guid><dc:creator>Blake Niemyjski</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://windowscoding.com/blogs/blake/rsscomments.aspx?PostID=280</wfw:commentRss><comments>http://windowscoding.com/blogs/blake/archive/2008/02/24/2008-lang-net-symposium-videos.aspx#comments</comments><description>&lt;p&gt;Check out the screen casts / videos of the Microsoft 2008 Lang.NET Symposium event. They have some pretty interesting videos available for everyone, granted you have Silverlight installed.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;View (&lt;/b&gt; &lt;a href="http://langnetsymposium.com/talks.asp"&gt;2008 Lang.NET Symposium Videos&lt;/a&gt; &lt;b&gt;)&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://windowscoding.com/aggbug.aspx?PostID=280" width="1" height="1"&gt;</description><category domain="http://windowscoding.com/blogs/blake/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/.Net/default.aspx">.Net</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/VB.Net/default.aspx">VB.Net</category></item><item><title>Got Posters?</title><link>http://windowscoding.com/blogs/blake/archive/2008/01/23/got-posters.aspx</link><pubDate>Wed, 23 Jan 2008 18:26:00 GMT</pubDate><guid isPermaLink="false">6b5532e6-57ca-4170-9999-8460b2d28065:266</guid><dc:creator>Blake Niemyjski</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://windowscoding.com/blogs/blake/rsscomments.aspx?PostID=266</wfw:commentRss><comments>http://windowscoding.com/blogs/blake/archive/2008/01/23/got-posters.aspx#comments</comments><description>Chris Bowen’s did a search last month for all posters available on Microsoft Downloads. This is what he found: 
&lt;br /&gt;&lt;ul&gt; &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;amp;p=4&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=&amp;amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3d7b645f3a-6d22-4548-a0d8-c2a27e1917f8%26DisplayLang%3den"&gt;.NET 3.5 Namespaces Poster&lt;/a&gt;&lt;br /&gt;The .NET Framework 3.5 Common Namespaces and Types Poster&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;amp;p=1&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=&amp;amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3d255b8cf1-f6bd-4b55-bb42-dd1a69315833%26DisplayLang%3den"&gt;Visual Basic 2008 Keybinding Poster&lt;/a&gt;&lt;br /&gt;Printable wall poster containing list of useful keyboard shortcuts for Visual Basic 2008 developers  &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;amp;p=2&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=&amp;amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3d4411bbfc-0e3c-42b3-bd05-af1d292c986f%26DisplayLang%3den"&gt;Visual C++ 2008 Keybinding Poster&lt;/a&gt;&lt;br /&gt;List of keybindings for Visual C++ language within Visual Studio and Visual C++ Express 2008  &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;amp;p=3&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=&amp;amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3de5f902a8-5bb5-4cc6-907e-472809749973%26DisplayLang%3den"&gt;Visual C# 2008 Poster&lt;/a&gt;&lt;br /&gt;Wall chart showing useful keyboard shortcuts for Visual C# programming language&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=771aeb45-9d27-4d1f-acd1-9b950637d64e&amp;amp;DisplayLang=en"&gt;2007 Office System: Developer Posters&lt;/a&gt; &lt;br /&gt;Download these posters to learn more about the new features and enhancement to the 2007 Microsoft Office System.  &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;amp;p=10&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=&amp;amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3dc2b9e44e-0bbd-47cb-bc09-b3d48be7f867%26DisplayLang%3den"&gt;Windows Server 2008 Component Posters&lt;/a&gt;&lt;br /&gt;Windows Server 2008 Component Posters, originally printed in the July 2007 issue of TechNet Magazine.  &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;amp;p=14&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=&amp;amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3d811d8ad6-8d48-4684-b08c-686462d58a56%26DisplayLang%3den"&gt;Microsoft Silverlight 1.1 (&lt;i&gt;Ed: Make that 2.0&lt;/i&gt;) Developer Reference Poster&lt;/a&gt; &lt;br /&gt;Microsoft Silverlight Developer Reference Poster  &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;amp;p=19&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=&amp;amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3dd99fb3dd-e753-4500-bdad-e59ac0cea903%26DisplayLang%3den"&gt;PnP Overview Poster&lt;/a&gt; &lt;br /&gt;Patterns &amp;amp; Practices Overview Poster  &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;amp;p=20&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=&amp;amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3d523bf8a4-2b48-459b-9a2a-19cfabad08dc%26DisplayLang%3den"&gt;Smart Client Poster&lt;/a&gt;&lt;br /&gt;Patterns &amp;amp; Practices Smart Client Poster  &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;amp;p=15&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=&amp;amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3dc15d210d-a926-46a8-a586-31f8a2e576fe%26DisplayLang%3den"&gt;Visual C# 2005 Keyboard Shortcut Reference Poster&lt;/a&gt;&lt;br /&gt;This poster contains the default keybindings for Visual C# 2005, and is available as a PDF download in either color or grayscale for you to print.  &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;amp;p=16&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=&amp;amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3d6bb41456-9378-4746-b502-b4c5f7182203%26DisplayLang%3den"&gt;Visual Basic 2005 Keyboard Shortcut Reference Poster&lt;/a&gt;&lt;br /&gt;This poster contains the default key bindings for Visual Basic 2005, and is available as a PDF download in either color or grayscale for you to print.  &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=22&amp;amp;p=17&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=&amp;amp;u=%2fdownloads%2fdetails.aspx%3fFamilyID%3dbccf84f4-4136-48b2-b4ec-83eaa484da20%26DisplayLang%3den"&gt;Visual C++ 2005 Keyboard Shortcut Reference Poster&lt;/a&gt;&lt;br /&gt;This poster contains the default keybindings for Visual C++ 2005, and is available as a PDF download in either color or grayscale for you to print.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;Source (&lt;/b&gt; &lt;a href="http://blogs.msdn.com/cbowen/archive/2007/12/09/got-tech-posters.aspx" target="_blank"&gt;Got Tech Posters?&lt;/a&gt; &lt;b&gt;)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;I also just did a search for myself and only came up with &lt;a href="http://www.microsoft.com/downloads/results.aspx?freetext=Poster&amp;amp;productID=&amp;amp;categoryId=10&amp;amp;period=120&amp;amp;sortCriteria=popularity&amp;amp;nr=50&amp;amp;DisplayLang=en" target="_blank"&gt;four results&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://windowscoding.com/aggbug.aspx?PostID=266" width="1" height="1"&gt;</description><category domain="http://windowscoding.com/blogs/blake/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/ASP.Net/default.aspx">ASP.Net</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/Ajax/default.aspx">Ajax</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/.Net/default.aspx">.Net</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/VB.Net/default.aspx">VB.Net</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/Visual+Studio+2005/default.aspx">Visual Studio 2005</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/Office+2007/default.aspx">Office 2007</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/VSTO/default.aspx">VSTO</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/Posters/default.aspx">Posters</category></item><item><title>Microsoft Visual Studio 2008 related downloads</title><link>http://windowscoding.com/blogs/blake/archive/2007/11/21/microsoft-visual-studio-2008-related-downloads.aspx</link><pubDate>Wed, 21 Nov 2007 15:06:00 GMT</pubDate><guid isPermaLink="false">6b5532e6-57ca-4170-9999-8460b2d28065:254</guid><dc:creator>Blake Niemyjski</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://windowscoding.com/blogs/blake/rsscomments.aspx?PostID=254</wfw:commentRss><comments>http://windowscoding.com/blogs/blake/archive/2007/11/21/microsoft-visual-studio-2008-related-downloads.aspx#comments</comments><description>&lt;p&gt;The last couple of days have been better than Christmas for a few of us.
Microsoft has been releasing many updates to its developer tools and sdk to go
with the recent release of Visual Studio 2008. Below I have listed the updates
that have been released with download links. Enjoy!&lt;/p&gt;&lt;p&gt;&lt;b&gt;Visual Studio 2008&lt;/b&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Download Express &lt;/b&gt;&lt;b&gt;Versions &lt;/b&gt;&lt;b&gt;(&lt;/b&gt; &lt;a href="http://www.microsoft.com/express/" target="_blank"&gt;here&lt;/a&gt; &lt;b&gt;)&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Download Retail &lt;/b&gt;&lt;b&gt;Versions &lt;/b&gt;&lt;b&gt;[ MSDN subscribers&amp;nbsp; only ] (&lt;/b&gt; &lt;a href="http://msdn2.microsoft.com/en-us/subscriptions/bb608344.aspx"&gt;here&lt;/a&gt; &lt;b&gt;)&lt;/b&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Download Trial Versions (&lt;/b&gt; &lt;a href="http://msdn2.microsoft.com/en-us/vstudio/products/aa700831.aspx"&gt;here&lt;/a&gt; &lt;b&gt;)&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Visual Studio 2008 SDK&lt;/b&gt;&amp;nbsp;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;i&gt;&amp;quot;&lt;/i&gt;&lt;span&gt;&lt;i&gt;This is the official software development kit that allows
developers to integrate tools, editors, designers, languages, and other
features inside Visual Studio 2008. &lt;br /&gt;&lt;br /&gt;
Key features in the VS 2008 SDK include:
&lt;/i&gt;
&lt;ul&gt;&lt;li&gt;&lt;i&gt;Visual Studio Shell development support&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Enhancements in Domain-specific Language tools&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Visual Studio Package development and testing support for C++, C# and Visual Basic&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Code samples and documentation covering toolbox controls
integration, general IDE integration, Domain-specific Languages (DSL),
Team Foundation Server extensibility, Data Designers extensibility ,
and other areas&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Support for Windows Vista&amp;quot;&lt;/i&gt; &lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&amp;nbsp;Source Microsoft&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;b&gt;Download Visual Studio 2008 SDK (&lt;/b&gt; &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=30402623-93ca-479a-867c-04dc45164f5b&amp;amp;DisplayLang=en" target="_blank"&gt;Version 1.0&lt;/a&gt; &lt;b&gt;)&lt;/b&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;b&gt;Visual Studio 2008 Samples&lt;/b&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;i&gt;&amp;quot;&lt;b&gt;ASP.NET&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Samples and starter kits are
     located &lt;a href="http://asp.net/"&gt;here&lt;/a&gt;. &lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;i&gt;&lt;b&gt;

Visual Basic&lt;/b&gt;&lt;/i&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;&lt;a href="http://msdn2.microsoft.com/vbasic/bb964686.aspx"&gt;Samples for Visual
     Studio 2008&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;a href="http://msdn2.microsoft.com/vbasic/bb964687.aspx"&gt;Samples for Visual
     Basic 2008 Express&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=e7fa5e3a-f8b2-4f77-bbcd-b5b978402dd1"&gt;Hands
     On Labs for LINQ&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;a href="http://msdn2.microsoft.com/en-us/vcsharp/bb688088.aspx"&gt;101 LINQ
     Samples&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;i&gt;&lt;b&gt;

Visual C#&lt;/b&gt;&lt;/i&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;&lt;a href="http://msdn2.microsoft.com/en-us/vcsharp/bb894665.aspx"&gt;LINQ and
     language samples for Visual Studio 2008&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;a href="http://download.microsoft.com/download/0/e/2/0e255cf3-b11f-44cb-b42c-7d55ed7b556c/linq_hands_on_lab.docx"&gt;LINQ
     Hands On Labs&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;a href="http://download.microsoft.com/download/0/e/2/0e255cf3-b11f-44cb-b42c-7d55ed7b556c/linq_to_sql_hands_on_lab.doc"&gt;LINQ
     to SQL Hands on Lab&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;a href="http://download.microsoft.com/download/0/e/2/0e255cf3-b11f-44cb-b42c-7d55ed7b556c/csharp_3.0_language_enhancements_hands_on_lab.doc"&gt;C#
     3.0 Language Enhancements Hands On Lab&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;a href="http://download.microsoft.com/download/d/7/e/d7eeb256-5789-411c-a367-c9fda05c2b1c/linq_to_sql_beta_2_to_rtm_breaking_changes.docx"&gt;LINQ
     to SQL Beta 2 to RTM Breaking Changes&lt;/a&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;&lt;a href="http://download.microsoft.com/download/d/7/e/d7eeb256-5789-411c-a367-c9fda05c2b1c/visual_basic_and_csharp_breaking_changes_from_visual_studio_2005_to_visual_studio_2008.docx"&gt;Visual
     Basic and C# Breaking Changes from Visual Studio 2005 to Visual Studio
     2008&lt;/a&gt;&lt;/i&gt;&amp;quot;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;







&lt;blockquote&gt;&lt;p&gt;&lt;span&gt;Source Microsoft&lt;/span&gt; &lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Microsoft Visual Studio Tools for the Microsoft Office system 3.0&lt;/b&gt; &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;i&gt;&amp;quot;This download (VSTOR30.exe) installs the Visual Studio Tools for the Office system 3.0 Runtime, which is required to run VSTO solutions for the 2007 Microsoft Office system built using Microsoft Visual Studio 2008&amp;quot;&lt;/i&gt; (Microsoft).&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;&lt;b&gt;Download Microsoft Visual Studio Tools for the Microsoft Office system (&lt;/b&gt; &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=54eb3a5a-0e52-40f9-a2d1-eecd7a092dcb&amp;amp;DisplayLang=en" target="_blank"&gt;x86&lt;/a&gt; &lt;b&gt;)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;b&gt;Microsoft Report Viewer Redistributable 2008&lt;/b&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;i&gt;&amp;quot;&lt;span&gt;Microsoft Report Viewer control enables applications that run on
the .NET Framework to display reports designed using Microsoft
reporting technology. This redistributable package contains Windows
Forms and ASP.NET Web server control versions of the Report Viewer&amp;quot;&lt;/span&gt;&lt;/i&gt; (Microsoft).&lt;/p&gt;&lt;p&gt;&lt;b&gt;Download Microsoft Report Viewer Redistributable 2008 (&lt;/b&gt; &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=cc96c246-61e5-4d9e-bb5f-416d75a1b9ef&amp;amp;DisplayLang=en" target="_blank"&gt;here&lt;/a&gt; &lt;b&gt;)&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;b&gt;Visual Studio 2008 Training Kit&lt;/b&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;i&gt;&amp;quot;The Visual Studio 2008 Training Kit contains a full 5-days of technical content including &lt;b&gt;20&lt;/b&gt;&lt;b&gt; &lt;/b&gt;&lt;b&gt;hands-on labs&lt;/b&gt;, &lt;b&gt;28 presentations&lt;/b&gt;, and &lt;b&gt;20 scripted demos&lt;/b&gt;.&amp;nbsp;&amp;nbsp;
The technologies covered in the kit include:&amp;nbsp; LINQ, C# 3.0, VB 9, WCF,
WF, WPF, Windows CardSpace, Silverlight, ASP.NET Ajax, .NET Compact
Framework 3.5, VSTO 3.0, Visual Studio Team System, and Team Foundation
Server&amp;quot;&lt;/i&gt; (&lt;a href="http://blogs.msdn.com/ericnel/archive/2007/11/20/visual-studio-2008-training-kit-updated-for-rtm.aspx" target="_blank"&gt;Eric Nelson&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;&lt;b&gt;Download Visual Studio 2008 Training Kit ( &lt;/b&gt;&lt;a href="http://go.microsoft.com/?linkid=7602397" target="_blank"&gt;here&lt;/a&gt; &lt;b&gt;)&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;b&gt;Visual Studio 2008 Shell (isolated mode) Redistributable Package&lt;/b&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;i&gt;&amp;quot;&lt;/i&gt;&lt;span&gt;&lt;i&gt;The Visual Studio Shell (isolated mode) provides a foundation on
which you can build your own custom-branded tools environment that runs
side by side with Visual Studio. By using the Visual Studio Shell
(isolated mode), you can accelerate development by reusing the Visual
Studio IDE in your application and focus on your core tooling problems&amp;quot;&lt;/i&gt; &lt;/span&gt;(Microsoft)&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Download Visual Studio 2008 Shell (isolated mode) Redistributable Package (&lt;/b&gt; &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=aca38719-f449-4937-9bac-45a9f8a73822&amp;amp;DisplayLang=en" target="_blank"&gt;Here&lt;/a&gt; &lt;b&gt;)&lt;/b&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Visual Studio 2008 Shell (integrated mode) Redistributable Package&lt;/b&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;i&gt;&amp;quot;&lt;span&gt;The Visual Studio Shell (integrated mode) provides the foundation
on which you can seamlessly integrate tools and programming languages
within Visual Studio. The Visual Studio Shell (integrated mode) does
not contain any programming language, so it provides the perfect
foundation to deploy a development environment for your own language.
The Visual Studio Shell (integrated mode) seamlessly integrates with
Visual Studio 2008 Standard and above. Any tools and programming
languages that run inside the Visual Studio Shell (integrated mode)
will run together with Visual Studio 2008 (Standard and above) if they
are also installed on the same machine. By using the Visual Studio
Shell (integrated mode), you will not need to make Visual Studio a
pre-requisite on your user machines&lt;/span&gt;&amp;quot;&lt;/i&gt; (Microsoft)&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Download Visual Studio 2008 Shell (integrated mode) Redistributable Package (&lt;/b&gt; &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=40646580-97fa-4698-b65f-620d4b4b1ed7&amp;amp;DisplayLang=en" target="_blank"&gt;Here&lt;/a&gt; &lt;b&gt;)&lt;/b&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://windowscoding.com/aggbug.aspx?PostID=254" width="1" height="1"&gt;</description><category domain="http://windowscoding.com/blogs/blake/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/ASP.Net/default.aspx">ASP.Net</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/.Net/default.aspx">.Net</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/VB.Net/default.aspx">VB.Net</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/Office+2007/default.aspx">Office 2007</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/Visual+Studio+2008/default.aspx">Visual Studio 2008</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/VSTO/default.aspx">VSTO</category></item><item><title> C# 3.0 and VB.NET 9.0 language specifications documents updated</title><link>http://windowscoding.com/blogs/blake/archive/2007/10/25/updated-c-3-0-and-vb-net-9-0-language-specifications-released.aspx</link><pubDate>Thu, 25 Oct 2007 15:51:00 GMT</pubDate><guid isPermaLink="false">6b5532e6-57ca-4170-9999-8460b2d28065:250</guid><dc:creator>Blake Niemyjski</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://windowscoding.com/blogs/blake/rsscomments.aspx?PostID=250</wfw:commentRss><comments>http://windowscoding.com/blogs/blake/archive/2007/10/25/updated-c-3-0-and-vb-net-9-0-language-specifications-released.aspx#comments</comments><description>&lt;p&gt;Microsoft has released updated documents detailing the language specifications for C# 3.0 and VB.NET 9.0 (&lt;a href="http://linqinaction.net/blogs/main/archive/2007/10/24/csharp-3.0-and-vb.net-9.0-language-specifications.aspx" target="_blank"&gt; C# 3.0 and VB.NET 9.0 language specifications&lt;/a&gt; ). These documents should take you quite some time to read&amp;nbsp;&lt;img src="http://windowscoding.com/emoticons/emotion-1.gif" alt="Smile" /&gt;. Enjoy!&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Download (&lt;/b&gt; &lt;a href="http://download.microsoft.com/download/3/8/8/388e7205-bc10-4226-b2a8-75351c669b09/csharp%20language%20specification.doc" target="_blank"&gt;C# 3.0 Language specifications&lt;/a&gt; &lt;b&gt;)&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Download (&lt;/b&gt; &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=39de1dd0-f775-40bf-a191-09f5a95ef500&amp;amp;displaylang=en" target="_blank"&gt;VB.NET 9.0 Language specifications&lt;/a&gt; &lt;b&gt;)&lt;/b&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://windowscoding.com/aggbug.aspx?PostID=250" width="1" height="1"&gt;</description><category domain="http://windowscoding.com/blogs/blake/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/VB.Net/default.aspx">VB.Net</category></item><item><title>Visual Studio 2005 Keyboard Shortcut Reference Posters</title><link>http://windowscoding.com/blogs/blake/archive/2007/02/08/Visual-Studio-2005-Keyboard-Shortcut-Reference-Posters.aspx</link><pubDate>Thu, 08 Feb 2007 09:10:00 GMT</pubDate><guid isPermaLink="false">6b5532e6-57ca-4170-9999-8460b2d28065:116</guid><dc:creator>Blake Niemyjski</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://windowscoding.com/blogs/blake/rsscomments.aspx?PostID=116</wfw:commentRss><comments>http://windowscoding.com/blogs/blake/archive/2007/02/08/Visual-Studio-2005-Keyboard-Shortcut-Reference-Posters.aspx#comments</comments><description>&lt;p class="MsoNormal" style="line-height:normal;"&gt;&lt;span style="font-size:12pt;font-family:'Times New Roman','serif';"&gt;I found these posters after
exploring an interesting MSDN &lt;a href="http://blogs.msdn.com/alfredth/archive/2007/01/30/visual-studio-key-board-shortcut-posters.aspx" target="_blank"&gt;&lt;span style="color:blue;"&gt;blog&lt;/span&gt;&lt;/a&gt; of a K-12 Computer
Science Academic Relations Manager. The posters are nice and well worth spending
the couple of seconds to download them.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal" style="line-height:normal;"&gt;&lt;span style="font-size:12pt;font-family:'Times New Roman','serif';"&gt;Here are the download links for each
language(s) shortcut reference poster&lt;/span&gt;&lt;/p&gt;

&lt;blockquote&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:12pt;line-height:115%;font-family:'Times New Roman','serif';"&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6bb41456-9378-4746-b502-b4c5f7182203&amp;amp;DisplayLang=en"&gt;&lt;span style="color:blue;"&gt;Visual Basic 2005&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c15d210d-a926-46a8-a586-31f8a2e576fe&amp;amp;DisplayLang=en"&gt;&lt;span style="color:blue;"&gt;Visual C#&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=BCCF84F4-4136-48B2-B4EC-83EAA484DA20&amp;amp;displaylang=en"&gt;&lt;span style="color:blue;"&gt;Visual C++&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:12pt;line-height:115%;font-family:'Times New Roman','serif';"&gt;&lt;strong&gt;
Source (&lt;/strong&gt; &lt;a href="http://blogs.msdn.com/alfredth/archive/2007/01/30/visual-studio-key-board-shortcut-posters.aspx" target="_blank"&gt;Visual Studio Keyboard Shortcut Posters&lt;/a&gt; &lt;strong&gt;)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://windowscoding.com/aggbug.aspx?PostID=116" width="1" height="1"&gt;</description><category domain="http://windowscoding.com/blogs/blake/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/.Net/default.aspx">.Net</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/VB.Net/default.aspx">VB.Net</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/Visual+Studio+2005/default.aspx">Visual Studio 2005</category></item><item><title>Up and coming features in C# 3.0</title><link>http://windowscoding.com/blogs/blake/archive/2006/12/30/Up-and-coming-features-in-CSharp-3.0.aspx</link><pubDate>Sat, 30 Dec 2006 20:34:00 GMT</pubDate><guid isPermaLink="false">6b5532e6-57ca-4170-9999-8460b2d28065:109</guid><dc:creator>Blake Niemyjski</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://windowscoding.com/blogs/blake/rsscomments.aspx?PostID=109</wfw:commentRss><comments>http://windowscoding.com/blogs/blake/archive/2006/12/30/Up-and-coming-features-in-CSharp-3.0.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;m personally Looking forward to C# 3.0. There are some interesting new things coming to the language. However there are somethings I really don&amp;#39;t like about c# (please pay attention to the end of this video &lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=10276" target="_blank"&gt;Anders Hejlsberg - Programming data in C# 3.0&lt;/a&gt; )&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Local variable type inference ( I personally don&amp;#39;t really like this idea)  &lt;/li&gt;
&lt;li&gt;Extension methods  &lt;/li&gt;
&lt;li&gt;Lamda expressions  &lt;/li&gt;
&lt;li&gt;Object initializers  &lt;/li&gt;
&lt;li&gt;Collection initializers  &lt;/li&gt;
&lt;li&gt;Query expressions  &lt;/li&gt;
&lt;li&gt;Anonymous types  &lt;/li&gt;
&lt;li&gt;Expression trees  &lt;/li&gt;
&lt;li&gt;Automatic properties&lt;/li&gt;
&lt;/ul&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  (Source: &lt;a href="http://blogs.msdn.com/nick_wong/archive/2006/12/30/c-3-0-upcoming-language-features.aspx" rel="nofollow" target="_blank"&gt;C# 3.0: Upcoming Language Features&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;

&lt;blockquote&gt;&lt;h3&gt;&lt;em&gt;26.1Implicitly
typed local variables&lt;/em&gt;&lt;/h3&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;em&gt;In an implicitly typed local variable declaration, the type of the local variable being declared is inferred from the expression used to initialize the variable. When a local variable declaration specifies var as the type and no type named var is in scope, the declaration is an implicitly typed local variable declaration. For example:&lt;br /&gt;&lt;br /&gt;var i = 5;&lt;br /&gt;var s = &amp;quot;Hello&amp;quot;;&lt;br /&gt;var d = 1.0;&lt;br /&gt;var numbers = new int[] {1, 2, 3};&lt;br /&gt;var orders = new Dictionary&amp;lt;int,Order&amp;gt;();&lt;br /&gt;&lt;br /&gt;The implicitly typed local variable declarations above are precisely equivalent to the following explicitly typed declarations:&lt;br /&gt;&lt;br /&gt;int i = 5;&lt;br /&gt;string s = &amp;quot;Hello&amp;quot;;&lt;br /&gt;double d = 1.0;&lt;br /&gt;int[] numbers = new int[] {1, 2, 3};&lt;br /&gt;Dictionary&amp;lt;int,Order&amp;gt; orders = new Dictionary&amp;lt;int,Order&amp;gt;();&lt;/em&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&amp;nbsp;&lt;/blockquote&gt;&lt;p&gt;





This reminds me of javascript, and personally I think this is a wrong move for the language because it kind of forces developers to be lazy. Even more so on larger projects could lead to developers that are maintaining code to do extra work just to understand the code. We will just have to wait and see how it turns out.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Download (&lt;/strong&gt; &lt;a href="http://download.microsoft.com/download/9/5/0/9503e33e-fde6-4aed-b5d0-ffe749822f1b/csharp%203.0%20specification.doc" target="_blank"&gt;Overview of C# 3.0&lt;/a&gt; &lt;strong&gt;)&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Download (&lt;/strong&gt; &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=C09B5A2D-EB6A-44B6-8BBD-3764A2FDA9CE&amp;amp;displaylang=en" target="_blank"&gt;Ocas October CTP - C# 3.0 Virtual PC Image&lt;/a&gt; &lt;strong&gt;)&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Watch (&lt;/strong&gt; &lt;a href="http://www.microsoft.com/emea/msdnshowtime/sessionh.aspx?videoid=319" target="_blank"&gt;C# 3.0: Future Directions in Language Innovation&lt;/a&gt; &lt;strong&gt;)&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://windowscoding.com/aggbug.aspx?PostID=109" width="1" height="1"&gt;</description><category domain="http://windowscoding.com/blogs/blake/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/.Net/default.aspx">.Net</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/VB.Net/default.aspx">VB.Net</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/Visual+Studio+2005/default.aspx">Visual Studio 2005</category></item><item><title>How to use Microsoft's Speech API (SAPI) in a managed application (C# - VB .Net)</title><link>http://windowscoding.com/blogs/blake/archive/2006/11/01/How-to-use-Microsofts-Speech-API-in-a-managed-application.aspx</link><pubDate>Wed, 01 Nov 2006 22:55:00 GMT</pubDate><guid isPermaLink="false">6b5532e6-57ca-4170-9999-8460b2d28065:87</guid><dc:creator>Blake Niemyjski</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://windowscoding.com/blogs/blake/rsscomments.aspx?PostID=87</wfw:commentRss><comments>http://windowscoding.com/blogs/blake/archive/2006/11/01/How-to-use-Microsofts-Speech-API-in-a-managed-application.aspx#comments</comments><description>&lt;p&gt;Sometime soon, I plan on releasing a cool application that uses text-to-speech. Some of you might have been curious about the implementation about text-to-speech for quite a while. The implementation of text-to-speech really isn&amp;#39;t that hard as long as you use Microsoft&amp;#39;s Speech API (SAPI). The current version of SAPI that you can download from Microsoft is 5.1, however if your running Windows Vista then you will have 5.3 preinstalled. If you have any version of Microsoft Office installed then you more then likely have this already, If not a download link is below.&lt;/p&gt;&lt;p&gt;The following link (&lt;a href="http://msdn.microsoft.com/coding4fun/inthebox/tts-hw/default.aspx" target="_blank"&gt;Giving Computers a Voice&lt;/a&gt;) will lead you to a Microsoft site that will show you how to create a project and get a basic text to speech application up and running in VB .Net or c# in no time!&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&amp;nbsp;SAPI&lt;br /&gt;&lt;br /&gt;SAPI is the speech API that gives applications access to speech recognition and text-to-speech (TTS) engines. This article focuses on TTS. For TTS, SAPI takes text as input and uses the TTS engine to output that text as spoken audio. This is the same technology used by the Windows accessibility tool, Narrator. Every version of Windows since XP has shipped with SAPI and an English TTS engine.&lt;br /&gt;&lt;br /&gt;TTS puts user&amp;#39;s ears to work. It allows applications to send information to the user without requiring the user&amp;#39;s eyes or hands. This is a very powerful output option that isn&amp;#39;t often utilized on PCs.&lt;br /&gt;&lt;br /&gt;Three steps are needed to use TTS in a managed application:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1. &lt;/strong&gt;Create an interop DLL&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Since SAPI is a COM component, an interop DLL is needed to use it from a managed app. To create this, open the project in Visual Studio. Select the Project menu and click Add Reference. Select the COM tab, select &amp;quot;Microsoft Speech Object Library&amp;quot; in the list, and click OK. These steps add this reference to your project and create an Interop.SpeechLib.dll in the same folder as your executable. This interop DLL must always be in the same folder as your .exe to work correctly.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;2.&lt;/strong&gt; Reference the interop namespace&lt;br /&gt;&lt;br /&gt;Include this namespace in your application. In C#, add &amp;quot;using SpeechLib;&amp;quot;; iIn VB, add &amp;ldquo;Imports SpeechLib&amp;rdquo;.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;3.&lt;/strong&gt; call Speak()&lt;br /&gt;&lt;br /&gt;Create a SpVoice object and call Speak():&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Visual C#&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SpVoice voice = new SpVoice();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; voice.Speak(&amp;quot;Hello World!&amp;quot;, SpeechVoiceSpeakFlags.SVSFDefault);&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Visual Basic&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; voice = New SpVoice&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; voice.Speak(&amp;quot;Hello World!&amp;quot;, SpeechVoiceSpeakFlags.SVSFDefault)&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;p style="color:red;"&gt;** After posting the article &lt;a href="http://msdn.microsoft.com/coding4fun/inthebox/tts-hw/default.aspx" target="_blank"&gt;Giving Computers a Voice&lt;/a&gt; went down, The above an excerpt from the article, all credit should go to the rightful author. **&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;If your running Windows Vista, and your planning on really diving deep into Microsoft&amp;#39;s Speech API (SAPI) version 5.3 then check out the following MSDN article ( &lt;a href="http://windowssdk.msdn.microsoft.com/en-us/library/ms723627.aspx" target="_blank"&gt;Microsoft Speech API 5.3&lt;/a&gt; )&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;For those of you who are looking for various Microsoft blogs that consistently blog about Speech related technologies then check out the following:&lt;/p&gt;&lt;ul class="BlogLinkCategoryLinkList"&gt;&lt;li&gt;&lt;div&gt;&lt;a href="http://blogs.msdn.com/robertbrown/" target="_blank"&gt;Robert Brown&amp;#39;s Blog&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&lt;a href="http://blogs.msdn.com/janderso/" target="_blank"&gt;Jen Anderson&amp;#39;s Blog&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&lt;a href="http://blogs.msdn.com/sprague/" target="_blank"&gt;Richard Sprague&amp;#39;s Blog&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&lt;a href="http://blogs.msdn.com/spokenword/" target="_blank"&gt;Stephen Potter&amp;#39;s Blog&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/texttospeech/" target="_blank"&gt;http://blogs.msdn.com/texttospeech/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://community.strongcoders.com/blogs/vcsjones/archive/2006/10/16/A-Fun-Windows-Form-Application.aspx" target="_blank"&gt;A Fun Windows Form Application&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Download ( &lt;/strong&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=5e86ec97-40a7-453f-b0ee-6583171b4530&amp;amp;DisplayLang=en" target="_blank"&gt;Speech SDK 5.1&lt;/a&gt; &lt;strong&gt;)&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://windowscoding.com/aggbug.aspx?PostID=87" width="1" height="1"&gt;</description><category domain="http://windowscoding.com/blogs/blake/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/Windows+Vista/default.aspx">Windows Vista</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/VB.Net/default.aspx">VB.Net</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/Microsofts+Speech+API/default.aspx">Microsofts Speech API</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/SAPI/default.aspx">SAPI</category></item><item><title>10 Programming Languages everyone should learn.</title><link>http://windowscoding.com/blogs/blake/archive/2006/09/17/10-Programming-Languages-everyone-should-learn_2E00_.aspx</link><pubDate>Sun, 17 Sep 2006 18:12:00 GMT</pubDate><guid isPermaLink="false">6b5532e6-57ca-4170-9999-8460b2d28065:71</guid><dc:creator>Blake Niemyjski</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://windowscoding.com/blogs/blake/rsscomments.aspx?PostID=71</wfw:commentRss><comments>http://windowscoding.com/blogs/blake/archive/2006/09/17/10-Programming-Languages-everyone-should-learn_2E00_.aspx#comments</comments><description>&lt;p&gt;I found this &lt;a href="http://www.eweek.com/article2/0,1759,2016415,00.asp?kc=EWRSS03119TX1K0000594" title="10 Programming Languages You Should Learn Right Now" target="_blank"&gt;article&lt;/a&gt; over at &lt;a href="http://www.eweek.com" title="http://www.eweek.com" target="_blank"&gt;eweek.com&lt;/a&gt; a few days ago and found it to be worthy of posting.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;1. PHP&lt;/strong&gt;&lt;/em&gt;
&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;table cellpadding="0" cellspacing="0"&gt;&lt;tr&gt;&lt;td align="left" class="Article_Content" colspan="2"&gt;&lt;li&gt;&lt;em&gt;What it is: An open-source, interpretive, server-side,
cross-platform, HTML scripting language, especially well-suited for Web
development as it can be embedded into HTML pages. &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Why you should learn it: It&amp;#39;s particularly widely used. &amp;quot;High-speed
scripting with caching, augmented with compiled code plug-ins (such as
can be done with Perl and PHP) is where the future is. Building Web
apps from scratch using C or COBOL is going the way of the dinosaur,&amp;quot;
said Duquaine. &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Job availabilities: 1,152*&lt;/em&gt;&lt;/li&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;2. C#&lt;/strong&gt;&lt;/em&gt;
&lt;/p&gt;&lt;li&gt;&lt;em&gt;What it is: A general-purpose, compiled, object-oriented
programming language developed by Microsoft as part of its .NET
initiative, it evolved from C and C++&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Why you should learn it: It&amp;#39;s an essential part of the .Net
framework. &amp;quot;Learning C#, which is just Java with a different name
plate, is critical if you heavily use Microsoft,&amp;quot; said Duquaine. &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Job availabilities: 5,111&lt;/em&gt;&lt;/li&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;3. AJAX (Asynchronous JavaScript and XML)&lt;/strong&gt;&lt;/em&gt;
&lt;/p&gt;&lt;li&gt;&lt;em&gt;What it is: Though technically not a programming language, AJAX
uses XHTML or HTML, JavaScript and XML to create interactive Web
applications. &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Why you should learn it: Ever since Google Maps put AJAX, well, on
the map, the requests for AJAX-knowledgeable pros went through the
roof. &amp;quot;The demand for AJAX knowledge is huge because it&amp;#39;s so damned
hard to learn,&amp;quot; said Huckaby. Of note, Microsoft announced recently
plans to release a tool named Atlas that will make AJAX easier to
implement. &amp;quot;If Microsoft&amp;#39;s Atlas tool is successful, it would bring the
extreme complexity and annoyance of AJAX to the average worker,&amp;quot; said
Huckaby. &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Job availabilities  : 1,106&lt;/em&gt;&lt;/li&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;4. JavaScript&lt;/strong&gt;&lt;/em&gt;
&lt;/p&gt;&lt;li&gt;&lt;em&gt;What it is: Not to be confused with Java, JavaScript is a an
object-oriented, scripting programming language that runs in the Web
browser on the client side. It&amp;#39;s smaller than Java, with a simplified
set of commands, easier to code and doesn&amp;#39;t have to be compiled. &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Why you should learn it: Embedded into HTML, it&amp;#39;s used in millions
of Web pages to validate forms, create cookies, detect browsers and
improve the design. With its simplicity to learn as well as wide use,
it&amp;#39;s considered a great bang for your educational buck. &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Job availabilities: 4,406&lt;/em&gt;&lt;/li&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;5. Perl&lt;/strong&gt;&lt;/em&gt;
&lt;/p&gt;&lt;li&gt;&lt;em&gt;What it is: Perl is an open-source, cross-platform, server-side
interpretive programming language used extensively to process text
through CGI programs. &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Why you should learn it: Perl&amp;#39;s power in processing of piles of
text has made it very popular and widely used to write Web server
programs for a range of tasks. &amp;quot;Learning some form of scripting
language, such as Perl or PHP is critical if you are doing Web apps,&amp;quot;
said Duquaine. &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Job availabilities: 4,810&lt;/em&gt;&lt;/li&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;6. C&lt;/strong&gt;&lt;/em&gt;
&lt;/p&gt;&lt;li&gt;&lt;em&gt;What it is: A standardized, general-purpose programming
language, it&amp;#39;s one of the most pervasive languages and the basis for
several others (such as C++).&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Why you should learn it: &amp;quot;Learning C is crucial. Once you learn C,
making the jump to Java or C# is fairly easy, because a lot of the
syntax is common. Also, a lot of C syntax is used in scripting
languages,&amp;quot; said Duquaine. &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Job availabilities: 6,164, including all derivatives&lt;/em&gt;&lt;/li&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;7. Ruby and Ruby on Rails&lt;/strong&gt;&lt;/em&gt;
&lt;/p&gt;&lt;li&gt;&lt;em&gt;What they are: Ruby is a dynamic, object-oriented, open-source
programming language; Ruby on Rails is an open-source Web application
framework written in Ruby that closely follows the MVC
(Model-View-Controller) architecture. &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Why you should learn it: With a focus on simplicity, productivity
and letting the computers do the work, in a few years, its usage has
spread quickly. As a bonus, many find it easy to learn. &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Job availabilities : 210 and 54, respectively&lt;/em&gt;&lt;/li&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;8. Java&lt;/strong&gt;&lt;/em&gt;
&lt;/p&gt;&lt;li&gt;&lt;em&gt;What it is: An object-oriented programming language developed
by James Gosling and colleagues at Sun Microsystems in the early 1990s.
&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Why you should learn it: Hailed by many developers as a &amp;quot;beautiful&amp;quot;
language, it is central to the non-.Net programming experience.
&amp;quot;Learning Java is critical if you are non-Microsoft,&amp;quot; said Duquaine. &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Job availabilities: 14,408&lt;/em&gt;&lt;/li&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;9. Python&lt;/strong&gt;&lt;/em&gt;
&lt;/p&gt;&lt;li&gt;&lt;em&gt;What it is: An interpreted, dynamically object-oriented,
open-source programming language that utilizes automatic memory
management. &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Why you should learn it: Designed to be a highly readable,
minimalist language, many say it has a sense of humor (spam and eggs,
rather than foo and bar), Python is used extensively by Google as well
as in academia because of its syntactic simplicity. &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Job availabilities: 811&lt;/em&gt;&lt;/li&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;10. VB.Net (Visual Basic .Net)&lt;/strong&gt;&lt;/em&gt;
&lt;/p&gt;&lt;li&gt;&lt;em&gt;What it is: An object-oriented language implemented on Microsoft&amp;#39;s .Net framework. &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Why you should learn it: Most argue that VB.Net is currently more
popular than ever and one of the only &amp;quot;must-learns.&amp;quot; &amp;quot;It is currently
dominating in adoption and that is where all the work is,&amp;quot; said
Huckaby. &lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Job availabilities: 2,090&lt;/em&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/blockquote&gt;&lt;p&gt;I&amp;#39;m hopeing that they write up a simular article in about a year. I would love to see if any avalon related technologys make it on this list. I&amp;#39;m pretty amazed that I already know five out of the ten langueages present in this list and am currently learning the 6th (C).&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://windowscoding.com/aggbug.aspx?PostID=71" width="1" height="1"&gt;</description><category domain="http://windowscoding.com/blogs/blake/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/Java/default.aspx">Java</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/Ajax/default.aspx">Ajax</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/php/default.aspx">php</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/C_2B002B00_/default.aspx">C++</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/.Net/default.aspx">.Net</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/Perl/default.aspx">Perl</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/Ruby/default.aspx">Ruby</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/VB.Net/default.aspx">VB.Net</category><category domain="http://windowscoding.com/blogs/blake/archive/tags/Python/default.aspx">Python</category></item></channel></rss>