<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.windowsclient.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Mathieu Roseboom</title><subtitle type="html">My experiences with .NET!</subtitle><id>http://blogs.windowsclient.net/mathieuroseboom/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.windowsclient.net/mathieuroseboom/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.windowsclient.net/mathieuroseboom/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20423.869">Community Server</generator><updated>2008-05-07T08:00:00Z</updated><entry><title>Fatal error when trying to load 'Choose Toolbox Items' dialog</title><link rel="alternate" type="text/html" href="http://blogs.windowsclient.net/mathieuroseboom/archive/2008/12/01/fatal-error-when-trying-to-loading-choose-toolbox-items-dialog.aspx" /><id>http://blogs.windowsclient.net/mathieuroseboom/archive/2008/12/01/fatal-error-when-trying-to-loading-choose-toolbox-items-dialog.aspx</id><published>2008-12-01T16:45:32Z</published><updated>2008-12-01T16:45:32Z</updated><content type="html">&lt;p&gt;A while ago I posted an item about Visual Studio 2008 Power Commands. Although it really adds some nice features to the IDE it also added a less nice feature. It turned out that Power Commands was able to let Visual Studio 2008 crash. &lt;/p&gt;  &lt;p&gt;I wanted to add some items to the toolbox, so I clicked on the &amp;#39;Choose Items&amp;#39; menu item in the contextmenu of the toolbox. After a few seconds of loading the active instance of Visual Studio was closed. &lt;/p&gt;  &lt;p&gt;The following error was logged into the Event Logs:&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;.NET Runtime version 2.0.50727.3053 - Fatal Execution Engine Error (66DE5E00) (80131506)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;After reading a bit on the Internet it turned out that Power Commands could be source. After removing Power Commands the issue was disappeared as well. &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Power Commands is still in development, however there hasn&amp;#39;t been a lot of activity lately. You can get the latest version &lt;a href="http://code.msdn.microsoft.com/PowerCommands" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.windowsclient.net/aggbug.aspx?PostID=87821" width="1" height="1"&gt;</content><author><name>MathieuRoseboom</name><uri>http://blogs.windowsclient.net/members/MathieuRoseboom.aspx</uri></author></entry><entry><title>Windows Live Writer &amp; plugins</title><link rel="alternate" type="text/html" href="http://blogs.windowsclient.net/mathieuroseboom/archive/2008/10/05/windows-live-writer-amp-plugins.aspx" /><id>http://blogs.windowsclient.net/mathieuroseboom/archive/2008/10/05/windows-live-writer-amp-plugins.aspx</id><published>2008-10-05T16:59:34Z</published><updated>2008-10-05T16:59:34Z</updated><content type="html">&lt;p&gt;To update this blog I use Windows Live Writer. After playing around for a while I discovered that this application can be extended with &lt;a href="http://gallery.live.com/results.aspx?bt=9&amp;amp;pl=8&amp;amp;ds=1&amp;amp;la={}&amp;amp;tier=0&amp;amp;st=5&amp;amp;p=1&amp;amp;c=0" target="_blank"&gt;plugins&lt;/a&gt;. So I decided to spend my sunday afternoon on trying to make my own plugin. And it turned out that this is actually pretty easy and interesting as well.&lt;/p&gt;  &lt;p&gt;To create your own plugin, just open up Visual Studio, create a new class library and add a reference to the Windows Live Writer API. This API can be found in c:\program files\Windows Live\Writer.    &lt;br /&gt;After that you can specify what kind of plugin you&amp;#39;d like to create. &lt;a href="http://msdn.microsoft.com/en-us/library/aa738863.aspx" target="_blank"&gt;There are several types.&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Example:     &lt;br /&gt;&lt;/strong&gt;Because code says more than words, a short example.&lt;/p&gt;  &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;height:253px;background-color:#f4f4f4;"&gt;   &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Imports&lt;/span&gt; WindowsLive.Writer.Api&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Imports&lt;/span&gt; System.Windows.Forms&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; &amp;lt;InsertableContentSource(&lt;span style="color:#006080;"&gt;&amp;quot;PluginName&amp;quot;&lt;/span&gt;), _&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;  WriterPlugin(&lt;span style="color:#006080;"&gt;&amp;quot;310A4D7F-97F4-4db7-9A4A-DF6E88A4AF3D&amp;quot;&lt;/span&gt;, _&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;               &lt;span style="color:#006080;"&gt;&amp;quot;PluginName&amp;quot;&lt;/span&gt;, _&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;               PublisherUrl:=&lt;span style="color:#006080;"&gt;&amp;quot;http://blogs.windowsclient.net/MathieuRoseboom&amp;quot;&lt;/span&gt;, _&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;               Description:=&lt;span style="color:#006080;"&gt;&amp;quot;Description&amp;quot;&lt;/span&gt;, _&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;               ImagePath:=&lt;span style="color:#006080;"&gt;&amp;quot;Image.png&amp;quot;&lt;/span&gt;)&amp;gt; _&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt; MyPluginContent&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;Inherits&lt;/span&gt; ContentSource&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;&amp;#39; Methods&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;Public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Overrides&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt; CreateContent(&lt;span style="color:#0000ff;"&gt;ByVal&lt;/span&gt; dialogOwner &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; IWin32Window, &lt;span style="color:#0000ff;"&gt;ByRef&lt;/span&gt; content &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;String&lt;/span&gt;) &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; DialogResult&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;Dim&lt;/span&gt; frm &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;New&lt;/span&gt; frmMain&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;         frm.ShowDialog()&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; (frm.DialogResult = DialogResult.OK) &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;             content = form.Code&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; DialogResult.OK&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  21:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;Return&lt;/span&gt; DialogResult.Cancel&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  22:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Function&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  23:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Class&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  24:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  25:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The pluginarchitecture uses attributes to determine the plugins. The &lt;a href="http://msdn.microsoft.com/en-us/library/aa702828.aspx" target="_blank"&gt;InsertableContentSource&lt;/a&gt; attribute defines the plugintype. The &lt;a href="http://msdn.microsoft.com/en-us/library/aa702864.aspx" target="_blank"&gt;WriterPlugin&lt;/a&gt; attribute defines that this class is a Windows Live Writer plugin and Windows Live Writer will automatically register this plugin.&lt;/p&gt;

&lt;p&gt;The class inherits from ContentSource. This basically means that this plugin inserts content. (what&amp;#39;s in the name)
  &lt;br /&gt;The content parameter which is given By Reference can be filled with the end HTML code. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resources:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://dev.live.com/writer/" target="_blank"&gt;Windows Live Dev&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa738906.aspx" target="_blank"&gt;Windows Live Writer SDK&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa702851.aspx" target="_blank"&gt;Creating a ContentSource plugin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://blogs.windowsclient.net/aggbug.aspx?PostID=69181" width="1" height="1"&gt;</content><author><name>MathieuRoseboom</name><uri>http://blogs.windowsclient.net/members/MathieuRoseboom.aspx</uri></author></entry><entry><title>PowerCommands for Visual Studio 2008</title><link rel="alternate" type="text/html" href="http://blogs.windowsclient.net/mathieuroseboom/archive/2008/10/05/powercommands-for-visual-studio-2008.aspx" /><id>http://blogs.windowsclient.net/mathieuroseboom/archive/2008/10/05/powercommands-for-visual-studio-2008.aspx</id><published>2008-10-05T16:28:02Z</published><updated>2008-10-05T16:28:02Z</updated><content type="html">&lt;p&gt;Recently I &amp;#39;discovered&amp;#39; this nice add-on for Visual Studio. I know, it&amp;#39;s out for a while, but I think it&amp;#39;s a very nice tool which helps you doing several standard tasks just a little bit quicker.&lt;/p&gt;  &lt;p&gt;This add-in integrates into Visual Studio 2008 and will add several menu items on several places like opening a command prompt or open the folder containing the current project.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For more information: &lt;a title="http://code.msdn.microsoft.com/PowerCommands" href="http://code.msdn.microsoft.com/PowerCommands"&gt;http://code.msdn.microsoft.com/PowerCommands&lt;/a&gt;. You can download the latest version there as well.     &lt;/p&gt;&lt;img src="http://blogs.windowsclient.net/aggbug.aspx?PostID=69145" width="1" height="1"&gt;</content><author><name>MathieuRoseboom</name><uri>http://blogs.windowsclient.net/members/MathieuRoseboom.aspx</uri></author></entry><entry><title>Taking a screenshot in .NETCF</title><link rel="alternate" type="text/html" href="http://blogs.windowsclient.net/mathieuroseboom/archive/2008/09/28/taking-a-screenshot-in-netcf.aspx" /><id>http://blogs.windowsclient.net/mathieuroseboom/archive/2008/09/28/taking-a-screenshot-in-netcf.aspx</id><published>2008-09-28T16:40:22Z</published><updated>2008-09-28T16:40:22Z</updated><content type="html">&lt;p&gt;Some time ago I decided to make my very first tool for Windows Mobile. I wanted to be able to make screenshots easily. Of course there where already some tools available to achieve this but since I&amp;#39;m a developer I wanted to create it on my own. &lt;/p&gt;  &lt;p&gt;The result is &lt;a href="http://forum.xda-developers.com/showthread.php?t=328627" target="_blank"&gt;PocketScreen&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://windowsclient.net/blogs/mathieuroseboom/WindowsLiveWriter/Takingascreenshotin.NETCF_10637/PocketScreen1_2.jpg"&gt;&lt;img height="240" alt="PocketScreen1" src="http://windowsclient.net/blogs/mathieuroseboom/WindowsLiveWriter/Takingascreenshotin.NETCF_10637/PocketScreen1_thumb.jpg" width="180" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;It includes a timer and the option to make several screenshots at a time. (with the timer as interval)&lt;/p&gt;  &lt;p&gt;Very simple, very straightforward, but it certainly does the job.&lt;/p&gt;  &lt;p&gt;The code to actually create the screenshot is also pretty easy with some P/Invoke&amp;#39;s&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;#39;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;&amp;#160; imports the GDI BitBlt function that enables the background of the window      &lt;br /&gt;&amp;#39;&amp;#160; to be captured       &lt;br /&gt;&amp;lt;DllImport(&amp;quot;coredll.dll&amp;quot;)&amp;gt; _       &lt;br /&gt;Private Shared Function BitBlt(ByVal hdcDest As IntPtr, _       &lt;br /&gt;&lt;/font&gt;&lt;code&gt;&lt;font size="2"&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ByVal nxDest As Integer, _        &lt;br /&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ByVal nyDest As Integer, _         &lt;br /&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ByVal nWidth As Integer, _         &lt;br /&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ByVal nHeight As Integer, _         &lt;br /&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ByVal hdcSrc As IntPtr, _         &lt;br /&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ByVal nXSrc As Integer, _         &lt;br /&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ByVal nYSrc As Integer, _         &lt;br /&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ByVal dwRop As Int32) As Boolean         &lt;br /&gt;End Function &lt;/font&gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;lt;DllImport(&amp;quot;coredll.dll&amp;quot;)&amp;gt; _      &lt;br /&gt;Public Shared Function GetDC(ByVal hWnd As IntPtr) As IntPtr       &lt;br /&gt;End Function &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;lt;DllImport(&amp;quot;coredll.dll&amp;quot;)&amp;gt; _      &lt;br /&gt;Public Shared Function ReleaseDC(ByVal hWnd As IntPtr, _       &lt;br /&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ByVal hDC As IntPtr) As Integer       &lt;br /&gt;End Function &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;#39;&amp;#39;&amp;#39; &amp;lt;summary&amp;gt;      &lt;br /&gt;&amp;#39;&amp;#39;&amp;#39; Creates a screenshot of the current screen, including taskbar and softkeys and saves it at the given location.       &lt;br /&gt;&amp;#39;&amp;#39;&amp;#39; &amp;lt;/summary&amp;gt;       &lt;br /&gt;&amp;#39;&amp;#39;&amp;#39; &amp;lt;param name=&amp;quot;Filename&amp;quot;&amp;gt;Filename of the screenshot&amp;lt;/param&amp;gt;       &lt;br /&gt;&amp;#39;&amp;#39;&amp;#39; &amp;lt;param name=&amp;quot;ImageFormat&amp;quot;&amp;gt;Type of image (PNG, JPG, GIF, BMP)&amp;lt;/param&amp;gt;       &lt;br /&gt;Private Function CaptureScreen(ByVal Filename As String, _       &lt;br /&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ByVal ImageFormat As System.Drawing.Imaging.ImageFormat) As Boolean       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;#39; Get the handle of the form&amp;#39;s device context and create compatible       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;#39; graphics and bitmap objects       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim srcDC As IntPtr = GetDC(IntPtr.Zero)&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim bm As New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim graphics As Graphics = graphics.FromImage(bm) &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;#39; Get the handle to the graphics object&amp;#39;s device context.      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dim bmDC As IntPtr = graphics.GetHdc &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;#39; Copy the form to the bitmap      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; BitBlt(bmDC, 0, 0, bm.Width, bm.Height, srcDC, 0, 0, &amp;amp;HCC0020) &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;#39; Release native resources      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ReleaseDC(IntPtr.Zero, srcDC)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; graphics.ReleaseHdc(bmDC)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; graphics.Dispose() &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;#39; Save the bitmap      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Try &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; bm.Save(Filename, ImageFormat)&amp;#160; &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Return True       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Catch ex As Exception&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Return False       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; End Try       &lt;br /&gt;End Function&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The function CaptureScreen is just a wrapper about the BitBlt function which is in the coredll.dll. &lt;/p&gt;&lt;img src="http://blogs.windowsclient.net/aggbug.aspx?PostID=66620" width="1" height="1"&gt;</content><author><name>MathieuRoseboom</name><uri>http://blogs.windowsclient.net/members/MathieuRoseboom.aspx</uri></author></entry><entry><title>Welcome</title><link rel="alternate" type="text/html" href="http://blogs.windowsclient.net/mathieuroseboom/archive/2008/05/07/welcome.aspx" /><id>http://blogs.windowsclient.net/mathieuroseboom/archive/2008/05/07/welcome.aspx</id><published>2008-05-07T06:00:00Z</published><updated>2008-05-07T06:00:00Z</updated><content type="html">&lt;p&gt;Welcome at my blog. I&amp;#39;ll use this blog to post some programming issues related to Windows Mobile (.NETCF).&lt;/p&gt;&lt;img src="http://blogs.windowsclient.net/aggbug.aspx?PostID=26758" width="1" height="1"&gt;</content><author><name>MathieuRoseboom</name><uri>http://blogs.windowsclient.net/members/MathieuRoseboom.aspx</uri></author></entry></feed>