<?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>Wot u do with .net  : Programming</title><link>http://blogs.msdn.com/paulfo/archive/tags/Programming/default.aspx</link><description>Tags: Programming</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Taking your app forward to Win7</title><link>http://blogs.msdn.com/paulfo/archive/2009/11/18/taking-your-app-forward-to-win7.aspx</link><pubDate>Wed, 18 Nov 2009 15:09:07 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9924308</guid><dc:creator>paulfo</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/paulfo/comments/9924308.aspx</comments><wfw:commentRss>http://blogs.msdn.com/paulfo/commentrss.aspx?PostID=9924308</wfw:commentRss><description>&lt;p&gt;If you are looking for a concise guide to the features you should consider for your application to shine on Windows 7 look &lt;a href="http://bit.ly/sSlF"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;A simple list of the 7 things you could do to rejuvenate your applications and ensure they work will and correctly in the modern world of Windows 7.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9924308" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/paulfo/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Widget development in Windows Mobile 6.5</title><link>http://blogs.msdn.com/paulfo/archive/2009/10/22/widget-development-in-windows-mobile-6-5.aspx</link><pubDate>Thu, 22 Oct 2009 08:42:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9911203</guid><dc:creator>paulfo</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/paulfo/comments/9911203.aspx</comments><wfw:commentRss>http://blogs.msdn.com/paulfo/commentrss.aspx?PostID=9911203</wfw:commentRss><description>&lt;div class="wlWriterHeaderFooter" style="float:right; margin:0px; padding:0px 0px 4px 8px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/paulfo/archive/2009/10/22/widget-development-in-windows-mobile-6-5.aspx";digg_title = "Widget development in Windows Mobile 6.5";digg_bgcolor = "#FFFFFF";digg_skin = "normal";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;p&gt;I had two sessions to present at &lt;a href="http://overtheair09.org" target="_blank"&gt;Over The Air 09&lt;/a&gt;. The first was all about the new &lt;a href="http://wotudo.net/files/folders/how2/entry487.aspx" target="_blank"&gt;Widget runtime included in Windows Mobile 6.5&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The runtime brings a Microsoft implementation of W3C Widget support to Windows Mobile for the first time. Our implementation is coupled with the launch of our very own mobile application Marketplace – this goes live with the launch of Windows Mobile 6.5 devices on the 6th Oct – allowing Widgets and native code applications (&amp;lt;10mb in size) to be sold directly to Windows Mobile 6 and upward devices.&lt;/p&gt;  &lt;p&gt;If you are new to Widgets then here is a summary: The widget ideal is to be able to build mobile applications using web development skills – HTML, Script and AJAX. They are installed on the device and look like a native application with just enough device integration to use soft keys and device state.&lt;/p&gt;  &lt;p&gt;So what is in our Widget implementation.&lt;/p&gt;  &lt;p&gt;Firstly, we&amp;#160; are using the Internet Explorer 6 HTML presentation engine (HTML Control). This is coupled with most of the IE8 script engine. These are brought together in the Widget runtime application called RIAHOST.EXE.&lt;/p&gt;  &lt;p&gt;RIAHost adds other stuff, including shell support for devices with touch, soft keys and importantly the Widget object.&lt;/p&gt;  &lt;p&gt;The Widget object allows the Widget programmer to reach beyond the Widget into the state of the device. Being able to determine things like signal and battery strength. If the widget is in focus or hidden. As well as many other things.&lt;/p&gt;  &lt;p&gt;Widgets are brilliant but I immediately want to do more with my Widgets.&lt;/p&gt;  &lt;p&gt;I think, for Widgets to be successful the developer must make them Smart Widgets. Rather than just using them as installed ‘web pages’ Widgets need to know when to start and when to stop doing stuff. The widget that continually calls a web service data update even when it is no longer ‘visible’ to the end user is going to drain the device battery and drive up the users data plan bill!&lt;/p&gt;  &lt;p&gt;With the Widget object, we can get hold of when the device is in focus and when it is hidden – allowing us to start or stop doing stuff. We can also tell if the user is roaming or on their home network – a smart widget might do less data traffic when roaming, or at least remind the user of the potential cost while roaming.&lt;/p&gt;  &lt;p&gt;Widgets can use a local data persistence. Each field stored can be up to 4000bytes. This allows Widgets to have another trick – the perceived performance trick. Performance exists into states – perceived performance is the performance the user sees on their device. Real performance is how practical it is to make a device really do something. They are two different things, with perceived performance being more important than real performance. A smart Widget developer will ensure the perceived performance of their widget is fast. They can do this by making only asynchronous web service calls and by using only stored state on startup – thus removing any ‘web update’ delay.&lt;/p&gt;  &lt;p&gt;What I like even more about the Widget object is that it can be extended. This means over time as more W3C standard interfaces for device service (like geolocation for example) are delivered, then this functionality can be added to WM 6.5 devices. It also means that WM 6.5 devices are open for developers to&amp;#160; innovate and deliver some leading edge solutions!&lt;/p&gt;  &lt;p&gt;Let me give you a quick run down of how this works.&lt;/p&gt;  &lt;p&gt;Are you a COM programmer? Probably not – so let me just tell you something. Windows has all manner of different levels of interoperability, applicable to many different technologies and skill sets. At the fundamental core of Windows is COM. If you can’t extend or subvert Windows functions by any other means you are 99% likely to be able to do it at the COM level.&lt;/p&gt;  &lt;p&gt;The Widget object is implemented with support for the IDispatchEX COM interface. IDispatch is the typical COM automation interface. IDispatchEX – or EXpanded – allows a COM object’s IDispatch interface – which normally reports a static list of method calls – to be extended at runtime with more method calls.&lt;/p&gt;  &lt;p&gt;In a nut shell, Widget has a base level of functionality, which by using the IDispatchEX functionality we can add more functionality too. Quite literally, your new object’s methods appear on the Widget object. For example, Widget.MyMethod().&lt;/p&gt;  &lt;p&gt;How do you do this? Well because Widget has the IDispatchEX, all we have to do is implement a normal IDispatch on our component. This presents method and properties that can be called from our component and that will appear on Widget.&lt;/p&gt;  &lt;p&gt;We have to create a CAB installation file for our component – Widgets aren’t allowed to have ActiveX components in their installation package. This does present an initial installation issue, but basically your Widget needs to test for the existence of the dependant component/s and if they aren’t there redirect the user to the CAB URL so that this can be installed on first use. There after, the component/s will be available to the Widget and any other Widgets that want them.&lt;/p&gt;  &lt;p&gt;There is one more ‘special bit’. To tell Widget that our component is designed to extend it we have to set a registry key. This can be easily done by including the key definition in the CAB installation file for the component. &lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;[HKEY_LOCAL_MACHINE\Software\Microsoft\Shell\Widgets\ObjectModels\&amp;lt;ObjectName&amp;gt;]&amp;#160;&amp;#160;&amp;#160; &amp;quot;CLSID&amp;quot;=&amp;quot;{GUID}“&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Where GUID is the GUID of your component control implementation.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;A small aside here. My device was running a near final but not final build of Windows Mobile 6.5. When I looked in the device registry to set this key I discovered my ObjectModels was actually BuiltinObjectModels. All the documentation I have seen says it is ObjectModels, but adding the above key to BuiltinObjectModels worked for me :-) Once it worked I didn’t go back to try doing it with a ObjectModels key – sorry pressures of work.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;With that done, and the component installed, our Widget can take advantage of our new functionality using script like this:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;Var myObj = widget.createObject(“ObjectName”);&lt;/strong&gt;&lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;myObj.MyMethod();&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;What might that new functionality be? Well it could be new W3C bits as they are defined. But what about that intellectual property of yours that you’d prefer not to implement in script for the world to easily see. Or many you just need some additional native code features to help exploit device capability.&lt;/p&gt;  &lt;p&gt;Using this feature means you can achieve all sorts of exciting stuff with your Widgets – or in fact, your exciting stuff can become the basis for other peoples widgets too.&lt;/p&gt;  &lt;p&gt;I’m currently exploring an Augmented Reality framework that could be implemented for Widgets to exploit. This needs some camera integration not available to the Widget script engine. A widget extension object might just be the way to go.&lt;/p&gt;  &lt;p&gt;I’m posting my extended widget source code on the &lt;a href="http://wotudo.net/files/folders/how2/entry504.aspx" target="_blank"&gt;downloads section&lt;/a&gt; of this site. Please also see the session slides PDF for more detail and do take a look a the &lt;a href="http://windowsteamblog.com/blogs/windowsphone/default.aspx" target="_blank"&gt;WindowsMobile team’s blog&lt;/a&gt; – Jorge is doing an awesome job filling in the detail on &lt;a href="http://windowsteamblog.com/blogs/windowsphone/archive/2009/09/22/widget-anatomy-performance-and-battery-life-the-final-frontier.aspx" target="_blank"&gt;Widget development&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;There are also some helpful projects on &lt;a href="http://www.codeplex.com/site/search?projectSearchText=widget" target="_blank"&gt;Codeplex&lt;/a&gt; which provide Widget packaging, emulation and project templates for VS2008 and Expression Web.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9911203" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/paulfo/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/UKDPETeam/default.aspx">UKDPETeam</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/UKDPE/default.aspx">UKDPE</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Windows+Mobile/default.aspx">Windows Mobile</category></item><item><title>Making your app shine on Windows 7: Tabbed Thumb Nails</title><link>http://blogs.msdn.com/paulfo/archive/2009/10/22/making-your-app-shine-on-windows-7-tabbed-thumb-nails.aspx</link><pubDate>Thu, 22 Oct 2009 08:38:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9911200</guid><dc:creator>paulfo</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/paulfo/comments/9911200.aspx</comments><wfw:commentRss>http://blogs.msdn.com/paulfo/commentrss.aspx?PostID=9911200</wfw:commentRss><description>&lt;div class="wlWriterHeaderFooter" style="float:right; margin:0px; padding:0px 0px 4px 8px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/paulfo/archive/2009/10/22/making-your-app-shine-on-windows-7-tabbed-thumb-nails.aspx";digg_title = "Making your app shine on Windows 7: Tabbed Thumb Nails";digg_bgcolor = "#FFFFFF";digg_skin = "normal";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;p&gt;This post is one in a series of posts covering the &lt;a href="http://code.msdn.microsoft.com/WindowsAPICodePack" target="_blank"&gt;Windows API Code Pack&lt;/a&gt;. The code pack provides a managed code framework for using the new native Windows 7 features.&lt;/p&gt;  &lt;p&gt;In this post we’ll examine how to implement thumbnail previews for a tabbed application UI. We’ll add to each thumbnail preview some buttons to control our application directly from the preview thumbnail. You need to be using .Net 3.5 SP1.&lt;/p&gt;  &lt;p&gt;I used a simple C# Winforms project to test this all out. You’ll need to add five references:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;WindowsBase&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;PresentationCore&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;PresentationFramework&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;Microsoft.WindowsAPICodePack&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Lucida Console"&gt;Microsoft.WindowsAPICodePack.Shell&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The code pack framework provides Integration to the Windows 7 thumbnail preview via the TaskbarManager class. The class contains four methods and five properties. The methods mainly deal with the overlay of icons onto the taskbar icon and the progress bar overlay that I’m sure you are already familiar with in Windows 7.&lt;/p&gt;  &lt;p&gt;The properties are the interesting bits for using thumbnail previews. The first property is a a boolean flag – IsPlatformSupported - to indicate if the current platform your app is running on can support thumbnails. Then you have Instance and ApplicationId. Instance represents the Windows Taskbar, and ApplicationId is the unique identifier for your application.&lt;/p&gt;  &lt;p&gt;Then you have the two most useful properties; the TabbedThumbnail and ThumbnailToolbars. These get the manager class for each type allowing you to add and update the thumbnail previews associated with your application and the toolbars that may also exist for each of the previews for your application. Yes each preview could have a different toolbar for each tabbed thumbnail.&lt;/p&gt;  &lt;p&gt;To add support to your application for thumbnail previews all you have to do is populate and maintain these two collections as necessary for your application. Because the code pack framework is provided as a static library doing this is very simple. &lt;/p&gt;  &lt;p&gt;I have a tabcontrol in my Winforms app that allows me to add new tabs containing new instances of the WebBrowser control. In my add new tab button click event I run the following code:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:95980625-4c44-400f-9055-3cadbf0248c9" class="wlWriterSmartContent"&gt;   &lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; color: #000; font-size: 10pt; border-top: #000080 1px solid; border-right: #000080 1px solid"&gt;     &lt;div style="padding-bottom: 2px; padding-left: 5px; padding-right: 5px; font-family: verdana, tahoma, arial, sans-serif; background: #000080; color: #fff; font-weight: bold; padding-top: 2px"&gt;Code Snippet&lt;/div&gt;      &lt;div style="background: #ddd; max-height: 500px; overflow: auto"&gt;       &lt;ol style="padding-bottom: 0px; margin: 0px 0px 0px 2.5em; padding-left: 5px; padding-right: 0px; background: #ffffff; padding-top: 0px"&gt;         &lt;li&gt;&lt;span style="color: #2b91af"&gt;TabPage&lt;/span&gt; newTab = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;TabPage&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Tab &amp;quot;&lt;/span&gt; + tabControl1.TabPages.Count + 1); &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;tabControl1.TabPages.Add(newTab); &lt;/li&gt;          &lt;li&gt;&lt;span style="color: #2b91af"&gt;WebBrowser&lt;/span&gt; wb = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;WebBrowser&lt;/span&gt;(); &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;wb.DocumentTitleChanged += &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;(wb_DocumentTitleChanged); &lt;/li&gt;          &lt;li&gt;wb.DocumentCompleted += &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;WebBrowserDocumentCompletedEventHandler&lt;/span&gt;(wb_DocumentCompleted); &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;wb.Navigated += &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;WebBrowserNavigatedEventHandler&lt;/span&gt;(wb_Navigated); &lt;/li&gt;          &lt;li&gt;wb.Dock = &lt;span style="color: #2b91af"&gt;DockStyle&lt;/span&gt;.Fill; &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;wb.Navigate(textBox1.Text); &lt;/li&gt;          &lt;li&gt;newTab.Controls.Add(wb); &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;&amp;#160; &lt;/li&gt;          &lt;li&gt;&lt;span style="color: #008000"&gt;// Add thumbnail toolbar buttons&lt;/span&gt; &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;&lt;span style="color: #2b91af"&gt;TaskbarManager&lt;/span&gt;.Instance.ThumbnailToolbars.AddButtons(newTab.Handle, thumbButtonBack, thumbButtonForward, thumbButtonRefresh); &lt;/li&gt;          &lt;li&gt;&amp;#160; &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;&lt;span style="color: #008000"&gt;// Add a new preview&lt;/span&gt; &lt;/li&gt;          &lt;li&gt;&lt;span style="color: #2b91af"&gt;TabbedThumbnail&lt;/span&gt; preview = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;TabbedThumbnail&lt;/span&gt;(&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.Handle, newTab.Handle); &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;&amp;#160; &lt;/li&gt;          &lt;li&gt;&lt;span style="color: #008000"&gt;// Event handlers for this preview&lt;/span&gt; &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;preview.TabbedThumbnailActivated += &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;TabbedThumbnailEventArgs&lt;/span&gt;&amp;gt;(preview_TabbedThumbnailActivated); &lt;/li&gt;          &lt;li&gt;preview.TabbedThumbnailClosed += &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;TabbedThumbnailEventArgs&lt;/span&gt;&amp;gt;(preview_TabbedThumbnailClosed); &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;preview.TabbedThumbnailMaximized += &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;TabbedThumbnailEventArgs&lt;/span&gt;&amp;gt;(preview_TabbedThumbnailMaximized); &lt;/li&gt;          &lt;li&gt;preview.TabbedThumbnailMinimized += &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;TabbedThumbnailEventArgs&lt;/span&gt;&amp;gt;(preview_TabbedThumbnailMinimized); &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;&amp;#160; &lt;/li&gt;          &lt;li&gt;&lt;span style="color: #2b91af"&gt;TaskbarManager&lt;/span&gt;.Instance.TabbedThumbnail.AddThumbnailPreview(preview); &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;&amp;#160; &lt;/li&gt;          &lt;li&gt;&lt;span style="color: #008000"&gt;// Select the tab in the application UI as well as taskbar tabbed thumbnail list&lt;/span&gt; &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;tabControl1.SelectedTab = newTab; &lt;/li&gt;          &lt;li&gt;&lt;span style="color: #2b91af"&gt;TaskbarManager&lt;/span&gt;.Instance.TabbedThumbnail.SetActiveTab(tabControl1.SelectedTab); &lt;/li&gt;       &lt;/ol&gt;     &lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;As you can see. I add a new tabpage, create a new instance of a WebBrowser control. Tie some events to it – these have meaningful code in them ensuring the correct thumbnail behaviour occurs on the Taskbar – and add the browser control to the tabpage.&lt;/p&gt;  &lt;p&gt;Then I add the ThumbnailToolbars buttons. These have already been defined at class level.&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c49cecd1-0b83-4dd6-bee7-e83e91fb0ef6" class="wlWriterSmartContent"&gt;   &lt;div style="border-bottom: #000080 1px solid; border-left: #000080 1px solid; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; color: #000; font-size: 10pt; border-top: #000080 1px solid; border-right: #000080 1px solid"&gt;     &lt;div style="padding-bottom: 2px; padding-left: 5px; padding-right: 5px; font-family: verdana, tahoma, arial, sans-serif; background: #000080; color: #fff; font-weight: bold; padding-top: 2px"&gt;Code Snippet&lt;/div&gt;      &lt;div style="background: #ddd; max-height: 500px; overflow: auto"&gt;       &lt;ol style="padding-bottom: 0px; margin: 0px 0px 0px 2em; padding-left: 5px; padding-right: 0px; background: #ffffff; padding-top: 0px"&gt;         &lt;li&gt;&amp;#160; &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ThumbnailToolbarButton&lt;/span&gt; thumbButtonBack; &lt;/li&gt;          &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ThumbnailToolbarButton&lt;/span&gt; thumbButtonForward; &lt;/li&gt;          &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ThumbnailToolbarButton&lt;/span&gt; thumbButtonRefresh; &lt;/li&gt;       &lt;/ol&gt;     &lt;/div&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Then a new instance of a TabbedThumbnail is created naming the Windows handle and the new tabpage handle. Following this the event handlers for the thumbnail toolbar buttons are attached.&lt;/p&gt;  &lt;p&gt;Our TabbedThumbnail definition is then added to the Taskbar instance’s collection of TabbedThumbnails. And finally, we ensure the new tabpage is the current tabpage in focus on the tabcontrol and on the taskbar.&lt;/p&gt;  &lt;p&gt;The rest of the code in the application ensures that when tabpages are changed in the tabcontrol the preview thumbnails are synchronised. And likewise, when preview thumbnails are selected or hovered over the correct tabpage is brought to focus.&lt;/p&gt;  &lt;p&gt;The end result lookis like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://wotudo.net/blogs/wotudo/image_11CB0883.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://wotudo.net/blogs/wotudo/image_thumb_7EE65F0B.png" width="475" height="259" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;There are all sorts of additional goodies in the TabbedThumbnail class properties that allow you to clip the bitmap and effective zoom into it as well as provide tooltips etc.&lt;/p&gt;  &lt;p&gt;Adding thumbnail previews to your applications seems a small effort for achieving one of the most visible enhancements in the Windows 7 UI. The code pack API makes it easy to do.&lt;/p&gt;  &lt;p&gt;My complete application can be downloaded from &lt;a href="http://wotudo.net/files/folders/how2/entry544.aspx" target="_blank"&gt;here&lt;/a&gt;. It is a simplified version of the code pack Thumbnail sample.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9911200" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/paulfo/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/UKDPETeam/default.aspx">UKDPETeam</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/UKDPE/default.aspx">UKDPE</category></item><item><title>XNA 3.1 install onto Windows 7</title><link>http://blogs.msdn.com/paulfo/archive/2009/10/22/xna-3-1-install-onto-windows-7.aspx</link><pubDate>Thu, 22 Oct 2009 08:37:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9911198</guid><dc:creator>paulfo</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/paulfo/comments/9911198.aspx</comments><wfw:commentRss>http://blogs.msdn.com/paulfo/commentrss.aspx?PostID=9911198</wfw:commentRss><description>&lt;div class="wlWriterHeaderFooter" style="float:right; margin:0px; padding:0px 0px 4px 8px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/paulfo/archive/2009/10/22/xna-3-1-install-onto-windows-7.aspx";digg_title = "XNA 3.1 install onto Windows 7";digg_bgcolor = "#FFFFFF";digg_skin = "normal";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;p&gt;I nuked my machines to move up to a clean build of Windows 7 RTM. In rebuilding them I hit a snag with the XNA3.1 install. The install would start and then rollback just after the redistributables copy started.&lt;/p&gt;  &lt;p&gt;To overcome this issue I set the runtime compatibility of the XNA 3.1 install file to be Windows Vista Service Pack 2 – you do this from the file property dialog. Re-running the XNA 3.1 install it all worked fine.&lt;/p&gt;  &lt;p&gt;On starting VS2008 Pro I see that I have both XNA 3.0 and XNA 3.1 project templates available.&lt;/p&gt;  &lt;p&gt;A quick test building the platform game and everything looks good.&lt;/p&gt;  &lt;p&gt;Now I just need a Zune HD!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9911198" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/paulfo/archive/tags/XNA/default.aspx">XNA</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Making your app shine on Windows 7: Jumplist</title><link>http://blogs.msdn.com/paulfo/archive/2009/10/22/making-your-app-shine-on-windows-7-jumplist.aspx</link><pubDate>Thu, 22 Oct 2009 08:35:49 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9911196</guid><dc:creator>paulfo</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/paulfo/comments/9911196.aspx</comments><wfw:commentRss>http://blogs.msdn.com/paulfo/commentrss.aspx?PostID=9911196</wfw:commentRss><description>&lt;div class="wlWriterHeaderFooter" style="float:right; margin:0px; padding:0px 0px 4px 8px;"&gt;&lt;script type="text/javascript"&gt;digg_url = "http://blogs.msdn.com/paulfo/archive/2009/10/22/making-your-app-shine-on-windows-7-jumplist.aspx";digg_title = "Making your app shine on Windows 7: Jumplist";digg_bgcolor = "#FFFFFF";digg_skin = "normal";&lt;/script&gt;&lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;digg_url = undefined;digg_title = undefined;digg_bgcolor = undefined;digg_skin = undefined;&lt;/script&gt;&lt;/div&gt;&lt;p&gt;This post is one in a series of posts covering the Windows API Code Pack. The code pack provides a managed code framework for using the new native Windows 7 features.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;After thumbnail previews the next item you’ll be looking to implement for your application is a Jumplist. A Jumplist may provide shortcuts to recent documents, frequently use documents and application functionality.&lt;/p&gt;  &lt;p&gt;Setting up a jumplist for your application is as simple as simple can be using the code pack managed API – but there are some gotchas worth noting.&lt;/p&gt;  &lt;p&gt;First, you have to have a valid active window on the taskbar before you can create your jumplist. This isn’t obvious – except when you get the code pack’s error message on first run of your modified application. Remember, in working with the new Taskbar features, you are actually providing the Taskbar with details you want it to attribute to your application. If it doesn’t know about your application, it can’t take your details.&lt;/p&gt;  &lt;p&gt;Second, the code pack API does a good job of proactive error detection. For example, it’ll test to make sure the file you want to list on your jumplist exists. If it doesn’t you get blown out before you get near the Taskbar. The same with file associations. The code pack tests for the file association relationship to your application. If it doesn’t you can’t list the file. For more details on this one, look at the code pack TaskBarDemo sample. You might wonder why this extreme protection. The answer lines in the third gotcha.&lt;/p&gt;  &lt;p&gt;Third, the known category types (Recent, Frequent) are populated by the Taskbar for your application ‘automagically’. So you only have to choose to show one of these categories in your jumplist to get the information displayed. This is because Windows maintains a recent items history infrastructure when you use the current common file dialogs( or explicitly call the relevant API). If you don’t use them (why?), you can hand code this mechanism by using the shell API SHAddToRecentDocs or the code pack’s jumplist.AddToRecent method.&lt;/p&gt;  &lt;p&gt;Fourth, the code pack’s jumplist does a lot of good stuff. This includes maintaining your jumplist against the removed items list created by the user. You may want to have all the items in the jumplist but the user can selectively remove file references from your list. It’s considered bad form to keep putting the item back when the user has removed it, jumplist ensures you don’t make this mistake. If you don’t use jumplist you have to check the removedDestinations property and modify the list yourself.&lt;/p&gt;  &lt;p&gt;Now lets look at the code. Below is the specific parts of a C# Winforms application showing the creation of a jumplist:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1a3f340c-075a-4bfb-8c11-47c874c73707" class="wlWriterSmartContent"&gt; &lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"&gt; &lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px"&gt;Code Snippet&lt;/div&gt; &lt;div style="background: #ddd; max-height: 500px; overflow: auto"&gt; &lt;ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff"&gt;partial&lt;/span&gt; &lt;span style="color:#0000ff"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af"&gt;Form1&lt;/span&gt; : &lt;span style="color:#2b91af"&gt;Form&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;{&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#2b91af"&gt;JumpList&lt;/span&gt; jumpList;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#2b91af"&gt;JumpListCustomCategory&lt;/span&gt; category1 = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;JumpListCustomCategory&lt;/span&gt;(&lt;span style="color:#a31515"&gt;&amp;quot;Custom Stuff&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#2b91af"&gt;JumpListCustomCategory&lt;/span&gt; category2 = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;JumpListCustomCategory&lt;/span&gt;(&lt;span style="color:#a31515"&gt;&amp;quot;Custom Stuff2&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;public&lt;/span&gt; Form1()&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;InitializeComponent();&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; Form1_Shown(&lt;span style="color:#0000ff"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af"&gt;EventArgs&lt;/span&gt; e)&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// create a new taskbar jump list for the main window&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;jumpList = &lt;span style="color:#2b91af"&gt;JumpList&lt;/span&gt;.CreateJumpList();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Add custom categories&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;jumpList.AddCustomCategories(category1, category2);&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;AddTasks();&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;jumpList.Refresh();&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff"&gt;void&lt;/span&gt; AddTasks()&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Path to Windows system folder&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#0000ff"&gt;string&lt;/span&gt; systemFolder = &lt;span style="color:#2b91af"&gt;Environment&lt;/span&gt;.GetFolderPath(&lt;span style="color:#2b91af"&gt;Environment&lt;/span&gt;.&lt;span style="color:#2b91af"&gt;SpecialFolder&lt;/span&gt;.System);&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;span style="color:#008000"&gt;// Add our user tasks&lt;/span&gt;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;jumpList.AddUserTasks(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;JumpListLink&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Path&lt;/span&gt;.Combine(systemFolder, &lt;span style="color:#a31515"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;), &lt;span style="color:#a31515"&gt;&amp;quot;Open Notepad&amp;quot;&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;IconReference = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;IconReference&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Path&lt;/span&gt;.Combine(systemFolder, &lt;span style="color:#a31515"&gt;&amp;quot;notepad.exe&amp;quot;&lt;/span&gt;), 0)&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;});&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;jumpList.AddUserTasks(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;JumpListLink&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Path&lt;/span&gt;.Combine(systemFolder, &lt;span style="color:#a31515"&gt;&amp;quot;mspaint.exe&amp;quot;&lt;/span&gt;), &lt;span style="color:#a31515"&gt;&amp;quot;Open Paint&amp;quot;&lt;/span&gt;)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;IconReference = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;IconReference&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Path&lt;/span&gt;.Combine(systemFolder, &lt;span style="color:#a31515"&gt;&amp;quot;mspaint.exe&amp;quot;&lt;/span&gt;), 0)&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;});&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;jumpList.AddUserTasks(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;JumpListSeparator&lt;/span&gt;());&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;jumpList.AddUserTasks(&lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;JumpListLink&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Path&lt;/span&gt;.Combine(systemFolder, &lt;span style="color:#a31515"&gt;&amp;quot;calc.exe&amp;quot;&lt;/span&gt;), &lt;span style="color:#a31515"&gt;&amp;quot;Open Calculator&amp;quot;&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;IconReference = &lt;span style="color:#0000ff"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af"&gt;IconReference&lt;/span&gt;(&lt;span style="color:#2b91af"&gt;Path&lt;/span&gt;.Combine(systemFolder, &lt;span style="color:#a31515"&gt;&amp;quot;calc.exe&amp;quot;&lt;/span&gt;), 0)&lt;/li&gt; &lt;li&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;});&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background: #f3f3f3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;All the work is kicked off in the form’s Shown event. With the creation of a jumplist. Two custom categories are added to it. Then some tasks are added that open other applications. The jumplist is ‘published’ by calling jumplist.refresh();&lt;/p&gt;  &lt;p&gt;Remember the Jumplist is created by the Taskbar for your application. Unlike the Thumbnail preview toolbars there doesn’t appear to be a mechanism of capturing jumplist events into your application. The only event raised by jumplist is when items have been removed from the jumplist since the last jumplist refresh occurred. This means achieving something similar to Internet Explorer 8’s Open new tab jumplist task, requires an ‘external’ communication to occur with your application.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9911196" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/paulfo/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/UKDPETeam/default.aspx">UKDPETeam</category></item><item><title>Preparing for The Assembly</title><link>http://blogs.msdn.com/paulfo/archive/2008/07/22/preparing-for-the-assembly.aspx</link><pubDate>Tue, 22 Jul 2008 15:01:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8763784</guid><dc:creator>paulfo</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/paulfo/comments/8763784.aspx</comments><wfw:commentRss>http://blogs.msdn.com/paulfo/commentrss.aspx?PostID=8763784</wfw:commentRss><description>&lt;p&gt;I have been lucky enough to get a &lt;a href="http://www.assembly.org/summer08/seminars/sessions" target="_blank"&gt;speaking slot&lt;/a&gt; at &lt;a href="http://www.assembly.org/summer08/assembly-1?set_language=en" target="_blank"&gt;The Assembly&lt;/a&gt; in Finland at the end of the month. 7000 computer hobbyists in one place for four days. Naturally I am talking about robotics! My plan during the session is to show how to build simulated worlds and robots to play in them. This will allow delegates to explore the world of robotics without cost - remember Microsoft Robotics Developer Studio is free for non-commercial use and requires only free runtime downloads from MS including Visual C# Express 2005/8.&lt;/p&gt; &lt;p&gt;However, I'm only speaking for a couple of hours and the event is four days long - although I can only attend for the first two days. So while manning the Microsoft booth I need a few more things to play with. &lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/paulfo/WindowsLiveWriter/PreparingforTheAssembly_B716/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="126" alt="image" src="http://blogs.msdn.com/blogfiles/paulfo/WindowsLiveWriter/PreparingforTheAssembly_B716/image_thumb.png" width="126" align="left" border="0"&gt;&lt;/a&gt; So, I have been plotting the rebuild of the &lt;a href="http://blogs.msdn.com/paulfo/archive/2008/06/21/mashed-08-wotudo-blimp.aspx" target="_blank"&gt;Wotudo blimp&lt;/a&gt;! Today I got the final part - a new &lt;a href="http://www.flyonthewall.uk.com/erol.html#3382X3396" target="_blank"&gt;5.8Ghz wireless camera&lt;/a&gt;. The camera from &lt;a href="http://www.flyonthewall.uk.com" target="_blank"&gt;Flyonthewall&lt;/a&gt; is superb quality! I mashed up a battery connector for it (using a PP3 9V battery) and was able to walk around my garden getting excellent colour images and audio from the camera. My garden is pretty big at 1.1acres, I only got signal interference when line of sight was broken by bushes and trees at about 40metres out, but once line of sight was restored it continued to work very well.&lt;/p&gt; &lt;p&gt;The plan is to use two new blimp balloons and the original blimp gondola with the camera to fly within The Assembly venue. Rather than having the two blimp balloons stacked - as we did at Mashed - I'm hoping we can make more of a 'X-wing' horizontal arrangement with them side by side and the gondola and camera in the middle.&lt;/p&gt; &lt;p&gt;&lt;img height="157" alt="" hspace="0" src="http://irbt.imageg.net/graphics/product_images/pIROBOT1-3426567p275w.jpg" width="157" align="left" border="0"&gt; &lt;p&gt;The camera receiver isn't USB so I intend to use my camcorder as the bridging device. This can take a video feed in from the receiver and convert it as required to a USB output which my laptop can use as a web cam. I can then process the feed as I wish - probably using the Volts-IQ visual SDK again to detect faces and other objects. Being 5.8Ghz of course I don't cause interference with Wifi :-)&lt;/p&gt; &lt;p&gt;&lt;img height="215" src="http://www.lynxmotion.com/images/jpg/l6arm3.jpg" width="287" align="right"&gt;&lt;/p&gt; &lt;p&gt;I also have an iRobot Create to take, and will put the camera onto this also, providing me with a remote camera I can process the feed from, for vision guidance etc. I don't have time to mount a PC on the Create as I intended too, so having it under remote Bluetooth control from a PC and with a wireless vision system is pretty cool to demo and play with. I may take my Lynxmotion 6 Axis arm with me as I can also control this via a wireless mechanism if I plumb the servos into my &lt;a href="http://www.robot-electronics.co.uk/" target="_blank"&gt;Devantech&lt;/a&gt; servo controller board rather than the servo controller supplied with the arm. Both the controller board and the arm run from batteries, so no real effort required to put this all together. I do need a new micro servo for the gripper as the gears break very easily - something to get ordered I think!!&lt;/p&gt; &lt;p&gt;I think The Assembly is looking pretty cool. I am very excited to be going and to be taking my toys with me!! Although the Sauna in the speaker lounge could be one step to far - even my Stockholm past hasn't prepared me for this ;-). If you are also attending do drop by the MS booth and my seminar to say hi!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8763784" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/paulfo/archive/tags/Robotics/default.aspx">Robotics</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/MRDS/default.aspx">MRDS</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Finland/default.aspx">Finland</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/The+Assembly/default.aspx">The Assembly</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/iRobot+Create/default.aspx">iRobot Create</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Flyonthewall/default.aspx">Flyonthewall</category></item><item><title>Microsoft Robotics Developer Studio 2008 CTP July</title><link>http://blogs.msdn.com/paulfo/archive/2008/07/19/microsoft-robotics-developer-studio-2008-ctp-july.aspx</link><pubDate>Sat, 19 Jul 2008 23:52:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8756221</guid><dc:creator>paulfo</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/paulfo/comments/8756221.aspx</comments><wfw:commentRss>http://blogs.msdn.com/paulfo/commentrss.aspx?PostID=8756221</wfw:commentRss><description>&lt;p&gt; The next CTP of MRDS is out! It has lots of exciting new features and tutorials (take a look at the DSS Log Analyzer - cam view and GPS mapping data example!).&lt;/p&gt;  &lt;p&gt;A quick list of highlights:&lt;/p&gt;  &lt;p&gt;1. &lt;b&gt;New samples and tutorials:&lt;/b&gt; This CTP has many new samples and tutorials including: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;1. &lt;b&gt;DSS Node Discovery using UPnP:&lt;/b&gt; A new UPnP sample illustrates how to use UPnP for discovering DSS nodes across a UPnP network. &lt;/p&gt;    &lt;p&gt;2. &lt;b&gt;Transport Extensibility:&lt;/b&gt; PipeTransport and PipeTransportHost are two new tutorials on how to write your own transport and load it in your custom host. In addition you will also find the UdpTransport and UdpTransport as additional transport samples. &lt;/p&gt;    &lt;p&gt;3. &lt;b&gt;LINQ:&lt;/b&gt; Service Tutorial 12 shows how to subscribe to the Directory Service using a LINQ Filter and how to receive filtered notifications. &lt;/p&gt;    &lt;p&gt;4. &lt;b&gt;Silverlight:&lt;/b&gt; The XBox Controller Viewer sample shows support for use of interactive Silverlight-based UI &lt;/p&gt;    &lt;p&gt;5. &lt;b&gt;Embedded Simulation Environment:&lt;/b&gt; The sample EmbeddedSim sample shows how to embed the Visual Simulation Environment in a custom Windows Forms user interface. &lt;/p&gt;    &lt;p&gt;6. &lt;b&gt;Simulated Pursuit Camera:&lt;/b&gt; The PursuitCamera sample shows how to implement a camera entity that follows behind a target and avoids obstacles. &lt;/p&gt;    &lt;p&gt;7. &lt;b&gt;Simulated 4x4-drive: &lt;/b&gt;The SimulatedFourByFourDrive sample shows how to implement an entity that behaves like a 4x4 off-road car. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;2. &lt;b&gt;Global Assembly Cache:&lt;/b&gt; Core CCR and DSS assemblies are put into the Global Assembly Cache. means that they are a shared resource for all installations on a single machine.&lt;/p&gt;  &lt;p&gt;3. &lt;b&gt;Simulation on 64-bit machines:&lt;/b&gt; Simulation now runs on 64-bit systems using the Microsoft Windows-32-on-Windows-64 (WOW64) subsystem. To use simulation on 64-bit machines, make sure you use dsshost32.exe which forces the WOW64 mode.&lt;/p&gt;  &lt;p&gt;4. &lt;b&gt;Visual Studio Project Wizards:&lt;/b&gt; The Visual Studio Project Wizards have been rewritten to make it much simpler to create new service projects directly from Visual Studio 2005 and 2008. Project wizards are provided for VB.Net and C# targeting .NET Framework.&lt;/p&gt;  &lt;p&gt;5. &lt;b&gt;Much Faster DSS Proxy Generation:&lt;/b&gt; The DssProxy tool has been completely rewritten to simplify the generation of service proxy assemblies and to make it much faster to compile services. In addition, the tool chain for writing services for .NET Compact Framework has been simplified to no longer need a companion service project targeting the desktop version of .NET Framework. This makes development for .NET Compact Framework much easier.&lt;/p&gt;  &lt;p&gt;6. &lt;b&gt;DSS Log Analyzer:&lt;/b&gt; The DSS Log Analyzer is a preview of a powerful new debugging and monitoring tool that can visualize and analyze message exchanges between services sent within a DSS node or across nodes. In addition to showing the actual messages that have been sent it also provides message correlations, time lines, and illustrates how multiple message interactions are causally linked over time.&lt;/p&gt;  &lt;p&gt;7. &lt;b&gt;Embedded Visual Simulation Environment:&lt;/b&gt; In addition to having a stand-alone UI, the Visual Simulation Environment can now be embedded in other applications. This enables other applications to show the Visual Simulation Environment as part of their application.&lt;/p&gt;  &lt;p&gt;See here for more: &lt;a href="http://msdn.microsoft.com/en-us/robotics/cc470038.aspx"&gt;Welcome to Microsoft Robotics Developer Studio 2008 CTP July&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Download link here: &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=57CE326B-2125-4163-A33F-ED2F69E03B56&amp;amp;displaylang=en#filelist" target="_blank"&gt;MS Download&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8756221" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/paulfo/archive/tags/Robotics/default.aspx">Robotics</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/MRDS/default.aspx">MRDS</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/CTP/default.aspx">CTP</category></item><item><title>Get kids programming with Wowwee bots!</title><link>http://blogs.msdn.com/paulfo/archive/2008/06/13/get-kids-programming-with-wowwee-bots.aspx</link><pubDate>Fri, 13 Jun 2008 11:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8594247</guid><dc:creator>paulfo</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/paulfo/comments/8594247.aspx</comments><wfw:commentRss>http://blogs.msdn.com/paulfo/commentrss.aspx?PostID=8594247</wfw:commentRss><description>&lt;P&gt;&lt;IMG height=240 alt=8061-RS-Media-Orange-2 src="http://www.character-online.com/thumbnailgenerator.ashx?id=12731&amp;amp;width=467&amp;amp;height=467&amp;amp;method=LimitCentred&amp;amp;background=FFFFFFFF&amp;amp;tlcorner=False&amp;amp;trcorner=False&amp;amp;brcorner=False&amp;amp;blcorner=False&amp;amp;cornerradius=0&amp;amp;type=Jpeg&amp;amp;quality=100&amp;amp;h=EEF1D89C1CB6B8A5254653C2F117CB7" width=240 align=left border=0 mce_src="http://www.character-online.com/thumbnailgenerator.ashx?id=12731&amp;amp;width=467&amp;amp;height=467&amp;amp;method=LimitCentred&amp;amp;background=FFFFFFFF&amp;amp;tlcorner=False&amp;amp;trcorner=False&amp;amp;brcorner=False&amp;amp;blcorner=False&amp;amp;cornerradius=0&amp;amp;type=Jpeg&amp;amp;quality=100&amp;amp;h=EEF1D89C1CB6B8A5254653C2F117CB7"&gt;&lt;/P&gt;
&lt;P&gt;Getting children into science and technology is one of the big challenges facing UK education today. Getting kids into programming is even harder. Or it used to be.&lt;/P&gt;
&lt;P&gt;Yesterday I met up with Jane Braybrook and Peter Kibble of Q4 Technologies. Jane (a Teacher) and Peter (a .net developer) have built an Integrated Development Environment(IDE) for children&lt;A href="http://www.q4technologies.com/Q4Technologies/Q4smartSite.dll/Home" target=_blank mce_href="http://www.q4technologies.com/Q4Technologies/Q4smartSite.dll/Home"&gt;, called Go-Robo,&lt;/A&gt; which allows them to use their Windows PC to program the Wowwee range of robots!&lt;/P&gt;
&lt;P&gt;The IDE comes in three flavours targeting the different key stages (KS) defined in the UK education curriculum. At KS1 &amp;amp; KS2 there is the Go-Robo Controller. At KS2 &amp;amp; KS3 the Go-Robo Programmer and at KS4, 5 and higher the Go-Robo Studio. There are three flavours so that the right level of features and user interface is presented for the age range of the children. Controller is a simple environment with mouse operations enabling the programming and execution of the code on the robot. The other versions move towards a complete scripting language (called GridScript) with all your normal language constructs. The IDE provides break points and stepped instruction execution too, along with a resources environment for teacher and student support! The new UK curriculum revisions provide many, and I mean many, topic areas where programming can be used appropriately as a practical exercise for the topic. Go-Robo provides the tools and the Wowwee robots ensure the children are focused and motivated.&lt;/P&gt;
&lt;P&gt;My eldest son of 7 years, who's previous programming experience was limited to the original Lego MindStorms RCX, was programming his Robosapian V1 with only two minutes instruction on the environment from me! Ok we haven't got into loops, if..then..else or sub-routines just yet but combinations of movements, speech and input messageboxes were no problems.&lt;A href="http://blogs.msdn.com/blogfiles/paulfo/WindowsLiveWriter/GetkidsprogrammingwithWowweebots_895B/CIMG0007.jpg" mce_href="http://blogs.msdn.com/blogfiles/paulfo/WindowsLiveWriter/GetkidsprogrammingwithWowweebots_895B/CIMG0007.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=184 alt=CIMG0007 src="http://blogs.msdn.com/blogfiles/paulfo/WindowsLiveWriter/GetkidsprogrammingwithWowweebots_895B/CIMG0007_thumb.jpg" width=244 align=right border=0 mce_src="http://blogs.msdn.com/blogfiles/paulfo/WindowsLiveWriter/GetkidsprogrammingwithWowweebots_895B/CIMG0007_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;There are several key things about the Go-Robo software (and accompanying IR beamer): The versions are focused on specific age ranges, accessibility has been a high priority in the UI, Go-Robo teaches children sequential programming - not picture drawing - real programming. Wowwee robots deliver instant gratification to your young programmers and are cheap, robust and importantly ready built. I particularly like the way Go-Robo uses speech synthesis to feedback what is happening in the IDE (such as at build and deployment time). During deployment with a Robosapion V2 it is as if the Windows PC and the bot are having a conversation! It can also speak the GridScript language elements so even children who can't read can use the tool. There is also a storyboard style timeline onto which your program or direct Gridscript elements can be placed along with accompanying music (for all those synchronised dance routines). &lt;/P&gt;
&lt;P&gt;We've only had Go-Robo in the Foster household for a few hours but already I can call my 7yo a programmer, and my 4yo is real keen to have a go too (school has got in the way, he'll have to wait until he gets home). &lt;/P&gt;
&lt;P&gt;Peter and Jane have had an excellent response from the education community in the UK. Not only have they won a Bett Education Show award, they have support from a local education authority (or whatever they are called these days) to deploy Go-Robo and Robosapian V2 to 50 schools in the Grimsby area of the UK.&lt;/P&gt;
&lt;P&gt;So, if you are like me, you're a dev who so wants to inspire his children into the wonders of science and technology, or a teacher who really wants to execute in STEM topics, I heartily recommend Go-Robo with your choice of Wowwee robot. Robosapian V2/RS Media provide the most functionality at the moment, but Robosapian V1, Roboraptor, and Roboquad all are very useable and fun. RoboPet has limited functionality. &lt;/P&gt;
&lt;P&gt;At present Wowwee UK importer&amp;nbsp; - Character - have most of these robots reduced enormously!! Like you can pick up the originally priced &lt;A href="http://www.character-online.com/products/robotics-robosapien/robosapien-rs-media/" target=_blank mce_href="http://www.character-online.com/products/robotics-robosapien/robosapien-rs-media/"&gt;£300 RS Media for £99&lt;/A&gt;!!! The other bots are even cheaper.&lt;/P&gt;
&lt;P&gt;The new generation of Wowwee robots promise even more and Peter is geared up to support them in future Go-Robo releases.&lt;/P&gt;
&lt;P&gt;I shall be taking Go-Robo to schools in Staffordshire at the end of this month to get further hands on experience and feedback from children. They'll use both Lego Mindstorms and Go-Robo - the feedback and observations are going to be really interesting. I'll let you know how I get on. There are several activities I've done in the last year which have been about inspiring young people to use tech - Go-Robo provides an even more programming focused activity. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;I really think this is something us techie pros should step up and do more of - supporting schools with our skills, inspiring young people to be creative with technology. If you agree please drop me a note - I want to make a contribution to UK Education. Are you with me?&lt;/STRONG&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8594247" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/paulfo/archive/tags/Education/default.aspx">Education</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Wowwee/default.aspx">Wowwee</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/paulfo/archive/tags/Go-Robo/default.aspx">Go-Robo</category></item></channel></rss>