<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.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>Mark Schmidt's Abode : Misc</title><link>http://blogs.msdn.com/markhsch/archive/tags/Misc/default.aspx</link><description>Tags: Misc</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Visual Studio Tip : AutoFormat Your Code</title><link>http://blogs.msdn.com/markhsch/archive/2008/01/10/visual-studio-tip-autoformat-your-code.aspx</link><pubDate>Fri, 11 Jan 2008 00:16:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7062594</guid><dc:creator>markhsch</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/markhsch/comments/7062594.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markhsch/commentrss.aspx?PostID=7062594</wfw:commentRss><wfw:comment>http://blogs.msdn.com/markhsch/rsscomments.aspx?PostID=7062594</wfw:comment><description>&lt;p&gt;Has this ever happened to you? You find some code on the Net so you copy and paste it into a source file within Visual Studio and notice that all the formatting is somehow messed up. For example. some lines might be indented while others are not.&lt;/p&gt; &lt;p&gt;To have Visual Studio fix it all up nice and tidy for you, select the text, hold CTRL and hit K followed by F (CTRL+K-F). What I usually do is do a CTRL-A to select all text then do the CTRL+K-F combo. Voila!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7062594" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markhsch/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/markhsch/archive/tags/Misc/default.aspx">Misc</category><category domain="http://blogs.msdn.com/markhsch/archive/tags/C_2F00_C_2B002B00_/default.aspx">C/C++</category></item><item><title>C# WebCam User Control Source</title><link>http://blogs.msdn.com/markhsch/archive/2007/11/19/c-webcam-user-control-source.aspx</link><pubDate>Mon, 19 Nov 2007 23:52:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6410347</guid><dc:creator>markhsch</dc:creator><slash:comments>37</slash:comments><comments>http://blogs.msdn.com/markhsch/comments/6410347.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markhsch/commentrss.aspx?PostID=6410347</wfw:commentRss><wfw:comment>http://blogs.msdn.com/markhsch/rsscomments.aspx?PostID=6410347</wfw:comment><description>&lt;p&gt;Some people have asked if they could take a look at the source for the WebCam Vista Sidebar gadget. After a little bit of cleaning up, I'm posting it now for you to take a look at. Here are some things worth mentioning:&lt;/p&gt; &lt;p&gt;1. Uses the DirectShow.NET library&lt;/p&gt; &lt;p&gt;2. I found some source in VB.NET and used that as a baseline (performed the conversion and cleaned up stuff that really wasn't needed)&lt;/p&gt; &lt;p&gt;3. I am in no way a DirectX/DirectShow expert. Any questions sent my way will likely result in a blank stare back at you :-) (though fwiw, I do pick up things quickly and might be able to at least get you started on the correct path)&lt;/p&gt; &lt;p&gt;4. If you look at the source, you might think "I thought this was a Vista Sidebar Gadget. Where is the gadget source?" That's the easy part. At the bottom of this post is a link to my .NET Gadget Creator application that I wrote (with instructions on how to use it with the WebCam control). That application will allow you to take any .NET UserControl and convert it into a Vista Sidebar Gadget. Just compile the WebCamControl2 control, and use the .NET Gadget Creator to create an instant Vista Sidebar gadget.&lt;/p&gt; &lt;p&gt;5. You may receive an error when you run the provided test application saying something along the lines of "invalid argument". This is a known issue and is happens when more than one application tries to access the same camera. I haven't looked into fixing this so if someone wants to take a stab at it, clue me in on how to fix it.&lt;/p&gt; &lt;p&gt;When looking through the source (there isn't that much to it) pay attention to the 2 primary methods. The first is the &lt;em&gt;GetInterfaces&lt;/em&gt; method which creates all the necessary DirectShow interfaces and then creates the connection between DirectShow and your UserControl window (events are passed to the control via Window messages).&lt;/p&gt; &lt;p&gt;The &lt;em&gt;FindCaptureDevice&lt;/em&gt; method enumerates through your devices looking for the 1st video device it finds that provides an input (&lt;em&gt;FilterCategory.InputDevice&lt;/em&gt;). This is done by creating a device class enumerator. Currently, the source will just grab the first device that it sees. If anyone is interested in knowing how to present the user with a list of all input devices, I can write some code to do that as well. Just let me know.&lt;/p&gt; &lt;p&gt;&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red43\green145\blue175;\red255\green255\blue255;\red0\green0\blue0;\red1\green0\blue1;\red0\green0\blue255;}??\fs20 \cf1 UCOMIEnumMoniker\cf0 {\b  }\cf4 classEnum\cf0 {\b  = }\cf5 null\cf0 {\b ;}\par ??\cf1 UCOMIMoniker\cf0 {\b [] }\cf4 moniker\cf0 {\b  = }\cf5 new\cf0 {\b  }\cf1 UCOMIMoniker\cf0 {\b [1];}\par ??\cf5 object\cf0 {\b  }\cf4 source\cf0 {\b  = }\cf5 null\cf0 {\b ;}\par ??\par ??\cf1 ICreateDevEnum\cf0 {\b  }\cf4 devEnum\cf0 {\b  = (}\cf1 ICreateDevEnum\cf0 {\b )(}\cf5 new\cf0 {\b  }\cf1 CreateDevEnum\cf0 {\b ());}\par ??\cf5 int\cf0 {\b  }\cf4 hr\cf0 {\b  = }\cf4 devEnum\cf0 .\cf4 CreateClassEnumerator\cf0 {\b (}\cf1 FilterCategory\cf0 .\cf4 VideoInputDevice\cf0 {\b , }\cf5 out\cf0 {\b  }\cf4 classEnum\cf0 {\b , }\cf1 CDef\cf0 .\cf4 None\cf0 {\b );}\par ??\cf1 DsError\cf0 .\cf4 ThrowExceptionForHR\cf0 {\b (}\cf4 hr\cf0 {\b );}\par ??\cf1 Marshal\cf0 .\cf4 ReleaseComObject\cf0 {\b (}\cf4 devEnum\cf0 {\b );}\par ??}
--&gt; &lt;div style="font-weight: bold; font-size: 10pt; background: white; color: black; font-family: consolas"&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 103&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight: normal; color: #2b91af"&gt;UCOMIEnumMoniker&lt;/span&gt; &lt;span style="font-weight: normal; color: #010001"&gt;classEnum&lt;/span&gt; = &lt;span style="font-weight: normal; color: blue"&gt;null&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 104&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight: normal; color: #2b91af"&gt;UCOMIMoniker&lt;/span&gt;[] &lt;span style="font-weight: normal; color: #010001"&gt;moniker&lt;/span&gt; = &lt;span style="font-weight: normal; color: blue"&gt;new&lt;/span&gt; &lt;span style="font-weight: normal; color: #2b91af"&gt;UCOMIMoniker&lt;/span&gt;[1];&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 105&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight: normal; color: blue"&gt;object&lt;/span&gt; &lt;span style="font-weight: normal; color: #010001"&gt;source&lt;/span&gt; = &lt;span style="font-weight: normal; color: blue"&gt;null&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 106&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 107&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight: normal; color: #2b91af"&gt;ICreateDevEnum&lt;/span&gt; &lt;span style="font-weight: normal; color: #010001"&gt;devEnum&lt;/span&gt; = (&lt;span style="font-weight: normal; color: #2b91af"&gt;ICreateDevEnum&lt;/span&gt;)(&lt;span style="font-weight: normal; color: blue"&gt;new&lt;/span&gt; &lt;span style="font-weight: normal; color: #2b91af"&gt;CreateDevEnum&lt;/span&gt;());&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 108&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight: normal; color: blue"&gt;int&lt;/span&gt; &lt;span style="font-weight: normal; color: #010001"&gt;hr&lt;/span&gt; = &lt;span style="font-weight: normal; color: #010001"&gt;devEnum&lt;/span&gt;&lt;span style="font-weight: normal"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; color: #010001"&gt;CreateClassEnumerator&lt;/span&gt;(&lt;span style="font-weight: normal; color: #2b91af"&gt;FilterCategory&lt;/span&gt;&lt;span style="font-weight: normal"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; color: #010001"&gt;VideoInputDevice&lt;/span&gt;, &lt;span style="font-weight: normal; color: blue"&gt;out&lt;/span&gt; &lt;span style="font-weight: normal; color: #010001"&gt;classEnum&lt;/span&gt;, &lt;span style="font-weight: normal; color: #2b91af"&gt;CDef&lt;/span&gt;&lt;span style="font-weight: normal"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; color: #010001"&gt;None&lt;/span&gt;);&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 109&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight: normal; color: #2b91af"&gt;DsError&lt;/span&gt;&lt;span style="font-weight: normal"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; color: #010001"&gt;ThrowExceptionForHR&lt;/span&gt;(&lt;span style="font-weight: normal; color: #010001"&gt;hr&lt;/span&gt;);&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 110&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight: normal; color: #2b91af"&gt;Marshal&lt;/span&gt;&lt;span style="font-weight: normal"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; color: #010001"&gt;ReleaseComObject&lt;/span&gt;(&lt;span style="font-weight: normal; color: #010001"&gt;devEnum&lt;/span&gt;);&lt;/p&gt;&lt;/div&gt; &lt;p&gt;Once the class enumerator is created, I just grab the first one that was found (assuming one was found) and bind it to an IBaseFilter object which I then return.&lt;/p&gt; &lt;p&gt;&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;\red1\green0\blue1;\red43\green145\blue175;\red163\green21\blue21;}??\fs20 \cf1 int\cf0 {\b  }\cf4 none\cf0 {\b  = 0;}\par ??\par ??\cf1 if\cf0 {\b  (}\cf4 classEnum\cf0 .\cf4 Next\cf0 {\b (}\cf4 moniker\cf0 .\cf4 Length\cf0 {\b , }\cf4 moniker\cf0 {\b , }\cf1 out\cf0 {\b  }\cf4 none\cf0 {\b ) == 0)}\par ??{\b \{}\par ??{\b     }\cf5 Guid\cf0 {\b  }\cf4 iid\cf0 {\b  = }\cf1 typeof\cf0 {\b (}\cf5 IBaseFilter\cf0 {\b ).}\cf4 GUID\cf0 {\b ;}\par ??{\b     }\cf4 moniker\cf0 {\b [0].}\cf4 BindToObject\cf0 {\b (}\cf1 null\cf0 {\b , }\cf1 null\cf0 {\b , }\cf1 ref\cf0 {\b  }\cf4 iid\cf0 {\b , }\cf1 out\cf0 {\b  }\cf4 source\cf0 {\b );}\par ??{\b \}}\par ??\cf1 else\par ??\cf0 {\b \{}\par ??{\b     }\cf1 throw\cf0 {\b  }\cf1 new\cf0 {\b  }\cf5 ApplicationException\cf0 {\b (}\cf6 "Unable to access video capture device!"\cf0 {\b );}\par ??{\b \}}\par ??\par ??\cf5 Marshal\cf0 .\cf4 ReleaseComObject\cf0 {\b (}\cf4 moniker\cf0 {\b [0]);}\par ??\cf5 Marshal\cf0 .\cf4 ReleaseComObject\cf0 {\b (}\cf4 classEnum\cf0 {\b );}\par ??\par ??\cf1 return\cf0 {\b  (}\cf5 IBaseFilter\cf0 {\b )}\cf4 source\cf0 {\b ;}\par ??}
--&gt; &lt;div style="font-weight: bold; font-size: 10pt; background: white; color: black; font-family: consolas"&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 117&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight: normal; color: blue"&gt;int&lt;/span&gt; &lt;span style="font-weight: normal; color: #010001"&gt;none&lt;/span&gt; = 0;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 118&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 119&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight: normal; color: blue"&gt;if&lt;/span&gt; (&lt;span style="font-weight: normal; color: #010001"&gt;classEnum&lt;/span&gt;&lt;span style="font-weight: normal"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; color: #010001"&gt;Next&lt;/span&gt;(&lt;span style="font-weight: normal; color: #010001"&gt;moniker&lt;/span&gt;&lt;span style="font-weight: normal"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; color: #010001"&gt;Length&lt;/span&gt;, &lt;span style="font-weight: normal; color: #010001"&gt;moniker&lt;/span&gt;, &lt;span style="font-weight: normal; color: blue"&gt;out&lt;/span&gt; &lt;span style="font-weight: normal; color: #010001"&gt;none&lt;/span&gt;) == 0)&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 120&lt;/span&gt; {&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 121&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-weight: normal; color: #2b91af"&gt;Guid&lt;/span&gt; &lt;span style="font-weight: normal; color: #010001"&gt;iid&lt;/span&gt; = &lt;span style="font-weight: normal; color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="font-weight: normal; color: #2b91af"&gt;IBaseFilter&lt;/span&gt;).&lt;span style="font-weight: normal; color: #010001"&gt;GUID&lt;/span&gt;;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 122&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-weight: normal; color: #010001"&gt;moniker&lt;/span&gt;[0].&lt;span style="font-weight: normal; color: #010001"&gt;BindToObject&lt;/span&gt;(&lt;span style="font-weight: normal; color: blue"&gt;null&lt;/span&gt;, &lt;span style="font-weight: normal; color: blue"&gt;null&lt;/span&gt;, &lt;span style="font-weight: normal; color: blue"&gt;ref&lt;/span&gt; &lt;span style="font-weight: normal; color: #010001"&gt;iid&lt;/span&gt;, &lt;span style="font-weight: normal; color: blue"&gt;out&lt;/span&gt; &lt;span style="font-weight: normal; color: #010001"&gt;source&lt;/span&gt;);&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 123&lt;/span&gt; }&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 124&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight: normal; color: blue"&gt;else&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 125&lt;/span&gt; {&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 126&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-weight: normal; color: blue"&gt;throw&lt;/span&gt; &lt;span style="font-weight: normal; color: blue"&gt;new&lt;/span&gt; &lt;span style="font-weight: normal; color: #2b91af"&gt;ApplicationException&lt;/span&gt;(&lt;span style="font-weight: normal; color: #a31515"&gt;"Unable to access video capture device!"&lt;/span&gt;);&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 127&lt;/span&gt; }&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 128&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 129&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight: normal; color: #2b91af"&gt;Marshal&lt;/span&gt;&lt;span style="font-weight: normal"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; color: #010001"&gt;ReleaseComObject&lt;/span&gt;(&lt;span style="font-weight: normal; color: #010001"&gt;moniker&lt;/span&gt;[0]);&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 130&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight: normal; color: #2b91af"&gt;Marshal&lt;/span&gt;&lt;span style="font-weight: normal"&gt;.&lt;/span&gt;&lt;span style="font-weight: normal; color: #010001"&gt;ReleaseComObject&lt;/span&gt;(&lt;span style="font-weight: normal; color: #010001"&gt;classEnum&lt;/span&gt;);&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 131&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="margin: 0px"&gt;&lt;span style="font-weight: normal; color: #2b91af"&gt;&amp;nbsp; 132&lt;/span&gt;&amp;nbsp;&lt;span style="font-weight: normal; color: blue"&gt;return&lt;/span&gt; (&lt;span style="font-weight: normal; color: #2b91af"&gt;IBaseFilter&lt;/span&gt;)&lt;span style="font-weight: normal; color: #010001"&gt;source&lt;/span&gt;;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;Once the video input device is found and we have our base filter, we associate it with an ICaptureGraphBuilder2 object by telling it render a video stream through the preview pin of the input device(line 68 below of the CaptureVideo method).&lt;/p&gt; &lt;p&gt; &lt;style type="text/css"&gt;
.cf { font-family: consolas; font-size: 10pt; color: black; background: white; font-weight: bold; }
.cl { margin: 0px; }
.cln { color: #2b91af; font-weight: normal; }
.cb1 { color: blue; font-weight: normal; }
.cb2 { color: #010001; font-weight: normal; }
.cb3 { color: #2b91af; font-weight: normal; }
.cb4 { color: green; font-weight: normal; }
.cb5 { font-weight: normal; }
.cb6 { color: #a31515; font-weight: normal; }
&lt;/style&gt;  &lt;div class="cf"&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 51&lt;/span&gt;&amp;nbsp;&lt;span class="cb1"&gt;private&lt;/span&gt; &lt;span class="cb1"&gt;void&lt;/span&gt; &lt;span class="cb2"&gt;CaptureVideo&lt;/span&gt;()&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 52&lt;/span&gt; {&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 53&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;int&lt;/span&gt; &lt;span class="cb2"&gt;hr&lt;/span&gt; = 0;&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 54&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb3"&gt;IBaseFilter&lt;/span&gt; &lt;span class="cb2"&gt;sourceFilter&lt;/span&gt; = &lt;span class="cb1"&gt;null&lt;/span&gt;;&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 55&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;try&lt;/span&gt;&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 56&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 57&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb4"&gt;// create the necessary DirectShow interfaces&lt;/span&gt;&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 58&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb2"&gt;GetInterfaces&lt;/span&gt;();&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 59&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 60&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb2"&gt;hr&lt;/span&gt; = &lt;span class="cb1"&gt;this&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;captureGraphBuilder&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;SetFiltergraph&lt;/span&gt;(&lt;span class="cb1"&gt;this&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;graphBuilder&lt;/span&gt;);&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 61&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb3"&gt;DsError&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;ThrowExceptionForHR&lt;/span&gt;(&lt;span class="cb2"&gt;hr&lt;/span&gt;);&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 62&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 63&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb2"&gt;sourceFilter&lt;/span&gt; = &lt;span class="cb2"&gt;FindCaptureDevice&lt;/span&gt;();&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 64&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 65&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb2"&gt;hr&lt;/span&gt; = &lt;span class="cb1"&gt;this&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;graphBuilder&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;AddFilter&lt;/span&gt;(&lt;span class="cb2"&gt;sourceFilter&lt;/span&gt;, &lt;span class="cb6"&gt;"WebCamControl Video"&lt;/span&gt;);&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 66&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb3"&gt;DsError&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;ThrowExceptionForHR&lt;/span&gt;(&lt;span class="cb2"&gt;hr&lt;/span&gt;);&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 67&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 68&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb2"&gt;hr&lt;/span&gt; = &lt;span class="cb1"&gt;this&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;captureGraphBuilder&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;RenderStream&lt;/span&gt;(&lt;span class="cb3"&gt;PinCategory&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;Preview&lt;/span&gt;, &lt;span class="cb3"&gt;MediaType&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;Video&lt;/span&gt;, &lt;span class="cb2"&gt;sourceFilter&lt;/span&gt;, &lt;span class="cb1"&gt;null&lt;/span&gt;, &lt;span class="cb1"&gt;null&lt;/span&gt;);&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 69&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb3"&gt;Debug&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;WriteLine&lt;/span&gt;(&lt;span class="cb3"&gt;DsError&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;GetErrorText&lt;/span&gt;(&lt;span class="cb2"&gt;hr&lt;/span&gt;));&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 70&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb3"&gt;DsError&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;ThrowExceptionForHR&lt;/span&gt;(&lt;span class="cb2"&gt;hr&lt;/span&gt;);&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 71&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 72&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb3"&gt;Marshal&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;ReleaseComObject&lt;/span&gt;(&lt;span class="cb2"&gt;sourceFilter&lt;/span&gt;);&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 73&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 74&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb2"&gt;SetupVideoWindow&lt;/span&gt;();&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 75&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 76&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb2"&gt;hr&lt;/span&gt; = &lt;span class="cb1"&gt;this&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;mediaControl&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;Run&lt;/span&gt;();&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 77&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb3"&gt;DsError&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;ThrowExceptionForHR&lt;/span&gt;(&lt;span class="cb2"&gt;hr&lt;/span&gt;);&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 78&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 79&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;this&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;CurrentState&lt;/span&gt; = &lt;span class="cb3"&gt;PlayState&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;Running&lt;/span&gt;;&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 80&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 81&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;catch&lt;/span&gt; (&lt;span class="cb3"&gt;Exception&lt;/span&gt; &lt;span class="cb2"&gt;ex&lt;/span&gt;)&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 82&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 83&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb3"&gt;MessageBox&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;Show&lt;/span&gt;(&lt;span class="cb6"&gt;"An unrecoverable error has occurred.\r\n"&lt;/span&gt; + &lt;span class="cb2"&gt;ex&lt;/span&gt;&lt;span class="cb5"&gt;.&lt;/span&gt;&lt;span class="cb2"&gt;ToString&lt;/span&gt;());&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 84&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt; &lt;p class="cl"&gt;&lt;span class="cln"&gt;&amp;nbsp;&amp;nbsp; 85&lt;/span&gt; }&lt;/p&gt;&lt;/div&gt; &lt;p&gt;Now, if you want to use that control in the Vista Sidebar, just download and install the following application:&lt;/p&gt; &lt;p&gt;&lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 66px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-d0866aae93a8e1aa.skydrive.live.com/embedrowdetail.aspx/Blog/NetSBHostCreator.exe" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt; &lt;p&gt;When you launch the application and click Next it will ask you to add .NET assemblies. Click the Add button, navigate to the WebCamTest or WebCamControl2 bin directory and select the WebCamControl2.dll AND the DirectShowLib.dll assemblies as shown below.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/CWebCamUserControlSource_ACB1/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="151" alt="image" src="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/CWebCamUserControlSource_ACB1/image_thumb.png" width="244" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Click Next twice to get to the "Select UserControl to Embed". Select the WebCamControl2.WebCamControl2 type and click Next. The next screen allows you to enter the information about the gadget. I provided an icon for you in the WebCamTest base directory. After you fill in the information, keep clicking Next and the gadget will be built for you. Go into the output directory you specified and you'll see the .gadget file. Simply double click on this and if all goes well, you should be looking at your webcam in the Vista Sidebar. Also, since you used the .NET Gadget Creator application, your gadget will uninstall successfully even while it is running (see &lt;a title=".NET Sidebar Gadget Creator Update #2" href="http://blogs.msdn.com/markhsch/archive/2007/08/01/net-sidebar-gadget-creator-update-2.aspx"&gt;.NET Sidebar Gadget Creator Update #2&lt;/a&gt; for more information).&lt;/p&gt; &lt;p&gt;Without further ado, here's the link to the WebCamControl source code.&lt;/p&gt; &lt;p&gt;&lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 66px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-d0866aae93a8e1aa.skydrive.live.com/embedrowdetail.aspx/Blog/WebCamControl2_src.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/CWebCamUserControlSource_ACB1/image_10.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="image" src="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/CWebCamUserControlSource_ACB1/image_thumb_4.png" width="229" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6410347" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markhsch/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/markhsch/archive/tags/Misc/default.aspx">Misc</category><category domain="http://blogs.msdn.com/markhsch/archive/tags/Cool+Stuff/default.aspx">Cool Stuff</category></item><item><title>New &amp; Improved NHL Schedule Importer for Outlook</title><link>http://blogs.msdn.com/markhsch/archive/2007/09/27/new-improved-nhl-schedule-importer-for-outlook.aspx</link><pubDate>Fri, 28 Sep 2007 01:11:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5174371</guid><dc:creator>markhsch</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/markhsch/comments/5174371.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markhsch/commentrss.aspx?PostID=5174371</wfw:commentRss><wfw:comment>http://blogs.msdn.com/markhsch/rsscomments.aspx?PostID=5174371</wfw:comment><description>&lt;P&gt;*EDIT*&amp;nbsp;Looks like the nhl.com scheduling page has changed thus breaking my importer. I'm working on a new version but no idea when it will be done. I've taken the link down.&lt;/P&gt;
&lt;P&gt;Ok, I redid the whole application (since I lost the source code) and added some new features as well. The previous application utilized XML which required you to actually get the NHL schedule in XML format somehow (I used Excel). Needless to say, it was a long and complicated process.&lt;/P&gt;
&lt;P&gt;This new version utilizes good old fashioned screen-scraping to get the job done. Here are some key features that I've added:&lt;/P&gt;
&lt;P&gt;1. Location field will tell if the stations the game is on for national and local (both away and home team) markets&lt;/P&gt;
&lt;P&gt;2. The body for each appointment when you open it up in Outlook contains links to each teams website as well as links to subscribe to that team's RSS feed (see screenshot below)&lt;/P&gt;
&lt;P&gt;3. ** Here's the cool feature ** After you ran the application and import your team's schedule, you can run the application at a later date and it will not create duplicate entries. In fact, if you run it a second time, it will add the game's final score and a link to show the recap of that game (again, see screenshot).&lt;/P&gt;
&lt;P&gt;4. You know have the ability to add an outlook reminder or not for each game&lt;/P&gt;
&lt;P&gt;5. UI is prettier. When you select a team from the drop down list, it will fetch that team's logo from the web and full team name (see screenshot).&lt;/P&gt;
&lt;P&gt;6. Internally everything is different. It would have been easy to allow you to select a year (e.g. 2008-2009) but I'll wait to add that. In any case, whenever a new NHL schedule is created, it's a trivial change to get the application to work with it.&lt;/P&gt;
&lt;P&gt;*NOTE* I tested this using Vista and Outlook 2007. If you have any issues when importing your team(s) schedule(s), let me know. It helps if you can send a screenshot or any error messages word for word. For developer types who know what a call stack is, send that as well if you can.&lt;/P&gt;
&lt;P&gt;Here's some screenshots followed by the link to download the application (complete with installer)&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/NewImprovedNHLScheduleImporterforOutlook_D4D0/importing_2.png" mce_href="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/NewImprovedNHLScheduleImporterforOutlook_D4D0/importing_2.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=484 alt=importing src="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/NewImprovedNHLScheduleImporterforOutlook_D4D0/importing_thumb.png" width=518 border=0 mce_src="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/NewImprovedNHLScheduleImporterforOutlook_D4D0/importing_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/NewImprovedNHLScheduleImporterforOutlook_D4D0/appointment_2.png" mce_href="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/NewImprovedNHLScheduleImporterforOutlook_D4D0/appointment_2.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=460 alt=appointment src="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/NewImprovedNHLScheduleImporterforOutlook_D4D0/appointment_thumb.png" width=644 border=0 mce_src="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/NewImprovedNHLScheduleImporterforOutlook_D4D0/appointment_thumb.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;H4&gt;&lt;EM&gt;&lt;/EM&gt;&amp;nbsp;&lt;/H4&gt;
&lt;H1 align=left&gt;&lt;EM&gt;&lt;FONT color=#804040&gt;&amp;nbsp;&lt;A href="http://avalanche.nhl.com/" target=_blank mce_href="http://avalanche.nhl.com/"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=75 alt=col src="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/NewImprovedNHLScheduleImporterforOutlook_D4D0/col_3.png" width=75 border=0 mce_src="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/NewImprovedNHLScheduleImporterforOutlook_D4D0/col_3.png"&gt;&lt;/A&gt; GO AVS!!! &lt;A href="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/NewImprovedNHLScheduleImporterforOutlook_D4D0/col_5.png" mce_href="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/NewImprovedNHLScheduleImporterforOutlook_D4D0/col_5.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=75 alt=col src="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/NewImprovedNHLScheduleImporterforOutlook_D4D0/col_thumb_1.png" width=75 border=0 mce_src="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/NewImprovedNHLScheduleImporterforOutlook_D4D0/col_thumb_1.png"&gt;&lt;/A&gt; &lt;/FONT&gt;&lt;/EM&gt;&lt;/H1&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5174371" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markhsch/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/markhsch/archive/tags/Misc/default.aspx">Misc</category><category domain="http://blogs.msdn.com/markhsch/archive/tags/Cool+Stuff/default.aspx">Cool Stuff</category></item><item><title>Use for the WebCam Sidebar Gadget</title><link>http://blogs.msdn.com/markhsch/archive/2007/09/21/use-for-the-webcam-sidebar-gadget.aspx</link><pubDate>Fri, 21 Sep 2007 22:08:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5038359</guid><dc:creator>markhsch</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/markhsch/comments/5038359.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markhsch/commentrss.aspx?PostID=5038359</wfw:commentRss><wfw:comment>http://blogs.msdn.com/markhsch/rsscomments.aspx?PostID=5038359</wfw:comment><description>&lt;p&gt;Someone asked "Why would I want a WebCam Sidebar Gadget to display my webcam in realtime"?&lt;/p&gt; &lt;p&gt;Good question. Answer: So you are prepared when the maiger strikes again!&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/UsefortheWebCamSidebarGadget_AA9F/maiger_sneek_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="182" alt="maiger_sneek" src="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/UsefortheWebCamSidebarGadget_AA9F/maiger_sneek_thumb.png" width="182" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;It's Friday. What can I say.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5038359" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markhsch/archive/tags/Misc/default.aspx">Misc</category><category domain="http://blogs.msdn.com/markhsch/archive/tags/Cool+Stuff/default.aspx">Cool Stuff</category></item><item><title>Creating .NET Sidebar Gadgets...The Easy Way</title><link>http://blogs.msdn.com/markhsch/archive/2007/07/17/creating-net-sidebar-gadgets-the-easy-way.aspx</link><pubDate>Tue, 17 Jul 2007 10:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3908804</guid><dc:creator>markhsch</dc:creator><slash:comments>14</slash:comments><comments>http://blogs.msdn.com/markhsch/comments/3908804.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markhsch/commentrss.aspx?PostID=3908804</wfw:commentRss><wfw:comment>http://blogs.msdn.com/markhsch/rsscomments.aspx?PostID=3908804</wfw:comment><description>&lt;P&gt;So you want to create a Vista Sidebar gadget and you want to use .NET to do so. While it is certainly possible, it does have a few hurtles to jump. 2 of the major hurdles include assembly registration and gadget uninstallation. Let me explain:&lt;/P&gt;
&lt;P&gt;First off, let me explain the typical setup of a gadget. Skip this paragraph if you already know. A gadget consists of a main HTML page with corresponding image and javascript supporting files. Each gadget also can optionally use a separate HTML file for settings. Each HTML file can utilize the gadget API provided by Sidebar. All the files and the gadget information itself is described using an XML file. This file contains information such as the gadget name, author, support URL, main gadget HTML filename, etc... Now, if you want to use a .NET UserControl, you have to register it as a COM server and embed it using the IE AcitveX object embedding mechanism. Easier done than said. OK, with that out of the way, let's continue.&lt;/P&gt;
&lt;P&gt;The ideal situation is to have a user download your gadget from &lt;A href="http://gallery.live.com/" mce_href="http://gallery.live.com"&gt;http://gallery.live.com&lt;/A&gt; and have the gadget install for you (Sidebar uses the .gadget file extension for this purpose). However, since you're not following a traditional installation path, you don't have the ability to register your assembly for COM so that it can be embedded within the HTML file your gadget uses. The current workaround is to create a Windows Shell Scripting object and manually add the registry entries each time your gadget is loaded. I won't display the code here because frankly it's somewhat ugly and susceptible with error. To further compound the problem, you have to create the registry entries in either HKCU or HKLM depending on whether the user is an administrator or not. Well, if you manage to do that, you're good to go. Of course, next time you create another gadget, you'll have to do it all again (ok, just a cut-n-paste and GUID changes but....still a pain).&lt;/P&gt;
&lt;P&gt;The 2nd issue that occurs when trying to create a .NET based Sidebar gadget is gadget uninstallation. This is the main issue that I've seen people just can't seem to figure out (until now that is...be patient and read on. Don't skip to the end). Once your gadget is installed and running, a user should be able to open the Add Gadget window (click the + sign on top of Sidebar), right click on your gadget and select Uninstall. Sidebar then removes any instances from the Sidebar and attempts to delete the gadget files. Here's the problem (and I can't get too specific). Even though the gadget is removed from the Sidebar, the .NET assembly is still loaded within the Sidebar process. Sidebar therefore cannot remove the files and will display an error message. The 2 options you have are to restart the Sidebar or to wait a certain amount of time (I forget, but it's awhile...like 10 or 20 minutes). Not ideal for users is it.&lt;/P&gt;
&lt;P&gt;While some developers might just think it'll be ok to let the uninstallation failure slide, you should know that when you submit your gadget to &lt;A href="http://gallery.live.com/" mce_href="http://gallery.live.com"&gt;http://gallery.live.com&lt;/A&gt;, it will fail since it doesn't uninstall.&lt;/P&gt;
&lt;P&gt;So, what's a developer to do? I ran into this same problem with my ScreenSaver gadget. To that end, I now present the .NET Sidebar Gadget creator (link at bottom). This is an application that will make creating a .NET based Sidebar gadget extremely easy. Wouldn't it be nice if all you had to do was (after creating your .NET control of course) fill out a few form fields, click a button and be finished? It is now. The application itself should be fairly self-explanatory when you run it. The main sticky point is that you obviously need a .NET assembly containing a UserControl that will be the main UI of your gadget (if need be, I can post the source code for the BouncingBall gadget that is included as a sample for the application).&lt;/P&gt;
&lt;P&gt;Run the application, browse to your assembly, fill out the required information and click the Build button. The .NET Sidebar gadget creator will then reflect on the assembly and extract control information, generate HTML, JavaScript and the gadget XML files and place everything in the destination directory you specify. Here's a screenshot:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/Creating.NETSidebarGadgets.TheEasyWay_28E/image.png" mce_href="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/Creating.NETSidebarGadgets.TheEasyWay_28E/image.png" atomicselection="true"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=480 alt=image src="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/Creating.NETSidebarGadgets.TheEasyWay_28E/image_thumb.png" width=330 border=0 mce_src="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/Creating.NETSidebarGadgets.TheEasyWay_28E/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Download the application, try it out and let me know if it works/doesn't work for you.&lt;/P&gt;
&lt;P&gt;Here's the link: &lt;A href="http://www.schmidt6.com/blogfiles/NetSBHostCreator.exe" mce_href="http://www.schmidt6.com/blogfiles/NetSBHostCreator.exe"&gt;NetSBHostCreator.exe&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;UPDATE: There is a problem with UAC. I think I have a working solution but I need to test a little more to make sure everything works fine. I'll post an updated solution soon followed closely by source code.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3908804" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markhsch/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/markhsch/archive/tags/Misc/default.aspx">Misc</category><category domain="http://blogs.msdn.com/markhsch/archive/tags/animation/default.aspx">animation</category><category domain="http://blogs.msdn.com/markhsch/archive/tags/Cool+Stuff/default.aspx">Cool Stuff</category></item><item><title>Fourth of July Vista Sidebar</title><link>http://blogs.msdn.com/markhsch/archive/2007/07/03/fourth-of-july-vista-sidebar.aspx</link><pubDate>Wed, 04 Jul 2007 00:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3676704</guid><dc:creator>markhsch</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/markhsch/comments/3676704.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markhsch/commentrss.aspx?PostID=3676704</wfw:commentRss><wfw:comment>http://blogs.msdn.com/markhsch/rsscomments.aspx?PostID=3676704</wfw:comment><description>&lt;P&gt;I found a screensaver that plays nicely with my Vista ScreenSaver Sidebar gadget. Just in time for the 4th of July!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;First, go get the ScreenSaver gadget and install it to your sidebar: &lt;A href="http://gallery.live.com/liveItemDetail.aspx?li=e321409b-231a-4da0-905c-0580c732223e&amp;amp;bt=1&amp;amp;pl=1"&gt;http://gallery.live.com/liveItemDetail.aspx?li=e321409b-231a-4da0-905c-0580c732223e&amp;amp;bt=1&amp;amp;pl=1&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Next, go grab the SkyRocket ScreenSaver and install it to your C:\Windows\System32 directory: &lt;A href="http://www.fileplanet.com/164987/160000/fileinfo/Skyrocket-Screensaver-%5BFREEWARE%5D"&gt;http://www.fileplanet.com/164987/160000/fileinfo/Skyrocket-Screensaver-%5BFREEWARE%5D&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Open the configuration options for the Sidebar gadget and select SkyRocket. Here's a screenshot for ya:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/photos/markhsch/images/3676655/original.aspx" target=_blank&gt;&lt;IMG src="http://blogs.msdn.com/photos/markhsch/images/3676655/original.aspx" border=0&gt;&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3676704" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markhsch/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/markhsch/archive/tags/Misc/default.aspx">Misc</category><category domain="http://blogs.msdn.com/markhsch/archive/tags/Cool+Stuff/default.aspx">Cool Stuff</category></item><item><title>My St. Patrick's Day Dash Results and Healthier Lifestyle Update</title><link>http://blogs.msdn.com/markhsch/archive/2007/03/12/my-st-patrick-s-day-dash-results-and-healthier-lifestyle-update.aspx</link><pubDate>Mon, 12 Mar 2007 22:33:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1867130</guid><dc:creator>markhsch</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/markhsch/comments/1867130.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markhsch/commentrss.aspx?PostID=1867130</wfw:commentRss><wfw:comment>http://blogs.msdn.com/markhsch/rsscomments.aspx?PostID=1867130</wfw:comment><description>&lt;p&gt;I, like many other people in the Seattle area, ran the St. Patrick's Day Dash yesterday. For those that don't know, I was a formerly heavy guy (see my&amp;nbsp;&lt;a title="I'm not half the man I used to be" href="http://blogs.msdn.com/markhsch/archive/2006/06/05/618405.aspx"&gt;I'm not half the man I used to be&lt;/a&gt;&amp;nbsp;post). Last year I ran the race I was 30 pounds heavier than I am now and the year before that I was 35 pounds heavier than that. This year I ran the course in 25:21 which was more than 3:30 less than I ran it last year. I ended up getting 853rd out of 7409&amp;nbsp;people (only counting those that wore a timing chip). I can't say I'm not pleased since I&amp;nbsp;shaved so much time off&amp;nbsp;last year's result, but I know that&amp;nbsp;if I would have hopped off the treadmill and hit the road&amp;nbsp;just&amp;nbsp;a few more times before the race I could have done much better.&lt;/p&gt; &lt;p&gt;Anyway, for those that ran it, the results are up (and the web interface is much nicer this year I must say).&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a title="St. Patrick's Day Dash" href="http://www.onlineraceresults.com/race/view_race.php?race_id=4964" target="_blank"&gt;Link to Online Race Results | Race Details&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Again, I have to thank Microsoft for providing the 20/20 Lifestyle program to help obese people (like I used to be) lose weight and transition into a healthier lifestyle. One of those perks that is worth more than money can buy. I lost 65 pounds but the cool thing is, I finished the program last May and to this day, I haven't put on a single pound. I've lost more body fat (I'm at 18% right now, down from about 37%) and gained more muscle. Now time to start training for my first triathlon this summer (and maybe a few more 5k and 10k's as well).&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1867130" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markhsch/archive/tags/Misc/default.aspx">Misc</category></item><item><title>My Screen Saver Vista Sidebar Gadget</title><link>http://blogs.msdn.com/markhsch/archive/2007/02/28/my-screen-saver-vista-sidebar-gadget.aspx</link><pubDate>Wed, 28 Feb 2007 22:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1775276</guid><dc:creator>markhsch</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/markhsch/comments/1775276.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markhsch/commentrss.aspx?PostID=1775276</wfw:commentRss><wfw:comment>http://blogs.msdn.com/markhsch/rsscomments.aspx?PostID=1775276</wfw:comment><description>&lt;p&gt;&amp;nbsp;For some reason, I'm drawn to creating things that are just cool while not altogether useful (see my Animated Activity Designer post, though one could argue that it may in fact be useful). To that end, I decided to create a Vista Sidebar gadget that displays a screen saver of your choosing. Vista has some good screen savers that it shipped with and I've embedded screen savers before (in fact, I show how to do it in one of my books).&lt;/p&gt; &lt;p&gt;So go ahead and grab it from the Windows Live Gallery (link below). If enough people clamor and beg, I will post the source code. Here's a quick rundown of what I did:&lt;/p&gt; &lt;p&gt;1. Create a .NET User Control&lt;br&gt;2. Embed a screen saver in the user control whenever the ScreenSaverPath property is set (and the control is visible)&lt;br&gt;3. Create the HTML page for the sidebar (sidebar controls use Javascript and HTML in case you didn't know already)&lt;br&gt;4. Embed the UserControl in the HTML page (using COM interop naturally)&lt;br&gt;5. Create a settings page that also uses COM Interop. The settings page calls a .NET component that I wrote that simply returns a collection of screen saver paths on the local system.&lt;br&gt;6. Create the installation in Javascript. I had to get some help for this one. Basically, I do what regasm does by using the WSHShell object to set registry entries. I found some code on the Internet to help.&lt;/p&gt; &lt;p&gt;Here's a screenshot of it in action using the Ribbons screensaver:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/MyScreenSaverVistaSidebarGadget_9F6F/ssavergadget%5B1%5D.jpg" atomicselection="true"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="240" src="http://blogs.msdn.com/blogfiles/markhsch/WindowsLiveWriter/MyScreenSaverVistaSidebarGadget_9F6F/ssavergadget.jpg" width="215" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Here's the link:&lt;/p&gt; &lt;p&gt;&lt;a href="http://gallery.live.com/liveItemDetail.aspx?li=e321409b-231a-4da0-905c-0580c732223e&amp;amp;l=1"&gt;Screen Saver Vista Sidebar Gadget&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1775276" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markhsch/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.msdn.com/markhsch/archive/tags/Misc/default.aspx">Misc</category><category domain="http://blogs.msdn.com/markhsch/archive/tags/animation/default.aspx">animation</category><category domain="http://blogs.msdn.com/markhsch/archive/tags/Cool+Stuff/default.aspx">Cool Stuff</category></item><item><title>I'm not half the man I used to be...</title><link>http://blogs.msdn.com/markhsch/archive/2006/06/05/618405.aspx</link><pubDate>Tue, 06 Jun 2006 01:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:618405</guid><dc:creator>markhsch</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/markhsch/comments/618405.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markhsch/commentrss.aspx?PostID=618405</wfw:commentRss><wfw:comment>http://blogs.msdn.com/markhsch/rsscomments.aspx?PostID=618405</wfw:comment><description>&lt;P&gt;I'm about 3/4 what I used to be. I recently finished the 20/20 weight management program of which Microsoft pays a large portion of. I started the Monday before Thanksgiving (why oh why did I not start after Thanksgiving) and just recently finished at the end of May. It was a 27 week program consisting of trainer sessions, a personal dietician, psychologist, small group meetings and regular doctor visits. I started at 262 pounds and wittled down to a fit 198 pounds (that's 64 pounds!). In that time I ran a race, climbed a mountain and pushed myself to run 11.6 miles one sunny Saturday.&lt;/P&gt;
&lt;P&gt;The cool thing is, I refused to see a lot of my family and friends during the time waiting instead to surprise them on Memorial Day. In fact, all I told them was that I have an announcement to make and want to meet them at my mothers house in Long Beach, WA. The look on everyone's face was priceless.&lt;/P&gt;
&lt;P&gt;I also decided to throw together a video (and by "throw together" I literally mean it. The quality isn't that great). I just finished uploading it to iFilm. Take a look if you're interested.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.ifilm.com/ifilmdetail/2732350"&gt;http://www.ifilm.com/ifilmdetail/2732350&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Feel free to comment/email and I'll provide more details on what I went through.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=618405" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markhsch/archive/tags/Misc/default.aspx">Misc</category></item><item><title>Here we go again</title><link>http://blogs.msdn.com/markhsch/archive/2004/09/28/235309.aspx</link><pubDate>Tue, 28 Sep 2004 17:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:235309</guid><dc:creator>markhsch</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/markhsch/comments/235309.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markhsch/commentrss.aspx?PostID=235309</wfw:commentRss><wfw:comment>http://blogs.msdn.com/markhsch/rsscomments.aspx?PostID=235309</wfw:comment><description>&lt;p&gt;I remember some parts of that historic day so long ago.&amp;nbsp; It was a beautiful spring morning on Sunday which meant plenty of time for playing outdoors.&amp;nbsp;I was 7 at the time and still getting used to the fact that I had a new baby brother (who was almost one by this time).&amp;nbsp; I don't remember exactly how it all panned out, but next thing I know, my mother grabbed some lawn chairs and placed them in the front yard.&amp;nbsp; She dashed for the camera (like she really needed to move that quick) and pointed our attention to the northern sky.&amp;nbsp; I sat amazed.&amp;nbsp; In front of me was a huge dark gray mushroom cloud coming from the top of Mt. St. Helens.&amp;nbsp; It was erupting before our very eyes and we had front row seats.&amp;nbsp; We took several pictures of my brothers and I with nature's fury spewing mud and ash behind us (I should go get&amp;nbsp;those pictures from here and post em).&amp;nbsp; It was a once in a chance lifetime to witness such a spectacle.&lt;/p&gt; &lt;p&gt;The next several weeks were very interesting.&amp;nbsp; We had to wear these paper masks when we went outside even though our area didn't receive very much fallen ash.&amp;nbsp; My grandmother's house in Battle Ground, WA (we lived in Vancouver, WA within walking distance of Sacajawea elementary for any locals that are wondering where I lived) received quite a bit more so we made frequent stops out there to play in it (yeah, we were dumb and we liked it!).&amp;nbsp; To this day, May 18th, 1980 fascinates me.&amp;nbsp; I just wish I was a little older at the time so that I can remember more of it.&lt;/p&gt; &lt;p&gt;Now I hear on the news that she's alive and well and possibly ready to belch more fury sometime soon.&amp;nbsp; One part of me says bring it on so my children can witness first hand what I went through so long ago.&amp;nbsp; The other part of me is saying that we obviously don't want this to happen again due to the vast devastation it brought to the wildlife, forests, rivers and humanity.&amp;nbsp; In any case, it makes for some interesting news.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=235309" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markhsch/archive/tags/Misc/default.aspx">Misc</category></item><item><title>MS Research: Video to Toon</title><link>http://blogs.msdn.com/markhsch/archive/2004/08/12/213622.aspx</link><pubDate>Thu, 12 Aug 2004 17:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:213622</guid><dc:creator>markhsch</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/markhsch/comments/213622.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markhsch/commentrss.aspx?PostID=213622</wfw:commentRss><wfw:comment>http://blogs.msdn.com/markhsch/rsscomments.aspx?PostID=213622</wfw:comment><description>&lt;p&gt;Video production is one of my hobbies.&amp;nbsp; My software of choice is &lt;a href="http://mediasoftware.sonypictures.com/products/showproduct.asp?PID=914"&gt;Vegas Video 5.0&lt;/a&gt; due to its power, flexibility, feature set&amp;nbsp;and price compared to its competitors.&amp;nbsp; So far I think I've created somewhere around 16 or so short video segments (4 of them actually used some cool &lt;a href="http://www.creativecow.net/show.php?forumid=1&amp;amp;page=/articles/onneweer_barend/chromashoot/index.htm"&gt;chromakeying &lt;/a&gt;effects).&amp;nbsp; Anyway, that's not the point of this post.&lt;/p&gt; &lt;p&gt;MS Research released an &lt;a href="http://research.microsoft.com/displayArticle.aspx?id=689"&gt;article&lt;/a&gt; showing how they can take &lt;a href="http://research.microsoft.com/images/featureStories/Tooning_FastForward.wmv"&gt;video&lt;/a&gt; and convert it to look like a cartoon.&amp;nbsp; I am absolutely astounded at how awesome it actually looks (watch the &lt;a href="http://research.microsoft.com/images/featureStories/Tooning_FastForward.wmv"&gt;video&lt;/a&gt;).&amp;nbsp; I was expecting a fake looking render similar to the fake looking cartoon styles in 3D games (&lt;a href="http://msdn.microsoft.com/library/default.asp?URL=/library/techart/DXVertex.htm"&gt;cel shading&lt;/a&gt;) but this actually looks like a real cartoon.&amp;nbsp; The only thing that saddens me is the quote at the bottom of the article:&lt;/p&gt; &lt;p&gt;&lt;em&gt;"Unfortunately, it won't be on your computer store shelf anytime soon, though the researchers would like this eventually."&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://research.microsoft.com/displayArticle.aspx?id=689"&gt;http://research.microsoft.com/displayArticle.aspx?id=689&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=213622" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markhsch/archive/tags/Misc/default.aspx">Misc</category></item><item><title>Obligatory first post</title><link>http://blogs.msdn.com/markhsch/archive/2004/08/04/208070.aspx</link><pubDate>Wed, 04 Aug 2004 17:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:208070</guid><dc:creator>markhsch</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/markhsch/comments/208070.aspx</comments><wfw:commentRss>http://blogs.msdn.com/markhsch/commentrss.aspx?PostID=208070</wfw:commentRss><wfw:comment>http://blogs.msdn.com/markhsch/rsscomments.aspx?PostID=208070</wfw:comment><description>&lt;P&gt;Time to add yet another MS blog to the fray.&amp;nbsp; I recently migrated from the world of HP to MS about a week and a half ago.&amp;nbsp; I was at HP for almost 6 years working as a Software Design Engineer.&amp;nbsp; In that time, I managed to publish a few articles in various Fawcette magazines as well as 2 books: &lt;A href="http://www.samspublishing.com/title/0672323230"&gt;SAMS Teach Yourself Visual C++ .NET in 24 Hours&lt;/A&gt; and &lt;A href="http://www.csharpcookbook.com/"&gt;Microsoft Visual C# .NET 2003 Developer's Cookbook&lt;/A&gt;.&amp;nbsp; So, I am one of those that has programming skills as well as writing.&lt;/P&gt;
&lt;P&gt;It comes as really no surprise to myself that I was hired on as a Programmer Writer, a position that requires good programming know-how in addition to writing prowess.&amp;nbsp; My main area of focus will be the &lt;A href="http://www.microsoft.com/biztalk/evaluation/rosettanet/"&gt;RosettaNet accelerator &lt;/A&gt;for &lt;A href="http://www.microsoft.com/biztalk/"&gt;BizTalk Server&lt;/A&gt;.&amp;nbsp; With that being the case, I plan on blogging frequently on both RosettaNet and BizTalk.&amp;nbsp; However, don't be surprised if I write about something completely different since I like to get my hands dirty in several different technologies.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=208070" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/markhsch/archive/tags/Misc/default.aspx">Misc</category></item></channel></rss>