<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tamir Khason - Just code &#187; Vista</title>
	<atom:link href="http://khason.net/tag/vista/feed/" rel="self" type="application/rss+xml" />
	<link>http://khason.net</link>
	<description>Take care of the sense, and the sounds will take care of themselves.</description>
	<lastBuildDate>Sun, 08 Nov 2009 18:24:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Some new in-mix downloads</title>
		<link>http://khason.net/tech/some-new-in-mix-downloads/</link>
		<comments>http://khason.net/tech/some-new-in-mix-downloads/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 14:19:18 +0000</pubDate>
		<dc:creator>Tamir</dc:creator>
				<category><![CDATA[TECH]]></category>
		<category><![CDATA[.NET 3.5]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[DEV]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[GIS]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[promo]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[x64]]></category>

		<guid isPermaLink="false">http://khason.net/tech/some-new-in-mix-downloads/</guid>
		<description><![CDATA[There are some very cool downloads suddenly appear on MSDN download site due to all new technologies, presented at Mix ‘09. So let’s start

Silverlight 3 SDK beta 1 
If you do not want to install full SDK, you can install only runtime for Windows or Mac. Then, you can read documentation online. You do not [...]


Related posts:<ol><li><a href='http://khason.net/tech/zone-of-pain-vs-zone-of-uselessness-or-code-analysis-with-ndepend/' rel='bookmark' title='Permanent Link: &ldquo;Zone of Pain vs. Zone of Uselessness&rdquo; or code analysis with NDepend'>&ldquo;Zone of Pain vs. Zone of Uselessness&rdquo; or code analysis with NDepend</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>There are some very cool downloads suddenly appear on MSDN download site due to all new technologies, presented at Mix ‘09. So let’s start</p>
<ul>
<li><a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=d09b6ecf-9a45-4d99-b752-2a330a937bc4#tm" target="_blank">Silverlight 3 SDK beta 1</a> </li>
<li>If you do not want to install full SDK, you can install only runtime for <a href="http://go.microsoft.com/fwlink/?LinkID=143433" target="_blank">Windows</a> or <a href="http://go.microsoft.com/fwlink/?LinkID=143434" target="_blank">Mac</a>. Then, you can <a href="http://go.microsoft.com/fwlink/?LinkId=111305" target="_blank">read documentation online</a>. You do not need it, if you’re going to install </li>
<li><a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=11dc7151-dbd6-4e39-878f-5081863cbb5d#tm" target="_blank">Silverlight 3 tools beta 1 for VS2008 SP1</a>. After you have all this, go to <a href="http://silverlight.net/getstarted/silverlight3/default.aspx" target="_blank">the official Silverlight web site</a> and start working. </li>
<li>If you re “in” .NET RIA Services, you can <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=76bb3a07-3846-4564-b0c3-27972bcaabce#tm" target="_blank">download March ‘09 preview of it</a> also to use with new Silverlight. It also makes sense to read about what is it <a href="http://blogs.msdn.com/brada/archive/2009/03/19/what-is-net-ria-services.aspx" target="_blank">in Brad’s blog</a>. </li>
<li>Also <a href="http://silverlight.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=20430" target="_blank">new Silverlight toolkit was released</a> with SL3 support and a bunch of new up/down controls, LayoutTransformer, Accordion and TransitioningContentControl. </li>
<li><a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=a04aa0ae-87be-4201-a65e-e792859122fc#tm" target="_blank">Microsoft Expression Blend 3 Preview</a>. It includes SL3 and WPF3.5 SP1 support, but excludes SketchFlow by now. </li>
</ul>
<p>To learn more about Silverlight 3.0 and Blend 3.0, you can see <a href="http://sessions.visitmix.com/MIX09/KEY01" target="_blank">first day keynotes at mix 09</a>, Rollup of <a href="http://sessions.visitmix.com/MIX09/T14F" target="_blank">what’s new in Silverlight 3</a> by <a href="http://blogs.msdn.com/jstegman/" target="_blank">Joe Stegman</a>. This includes <a href="http://sessions.visitmix.com/MIX09/T45F" target="_blank">offline mode support</a> by <a href="http://blogs.msdn.com/mharsh/" target="_blank">Mike Harsh</a>. I’ll write another separate post for this topic, due to the fact, that I’m a desktop guy, so wary about the future of WPF. </p>
<p>To learn more about how to use new Expression Blend, it worth to see <a href="http://sessions.visitmix.com/MIX09/C27M" target="_blank">this session</a> by <a href="http://blois.us/blog/" target="_blank">Pete Blois</a>. Another good sessions are also <a href="http://www.hanselman.com/blog/Mix09FirstHalfRollupAndSessionVideos.aspx" target="_blank">wrapped for you by Scott Hanselman</a>. </p>
<p>After we done with all web stuff, let’s speak about a client</p>
<ul>
<li><a href="https://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=f851122a-4925-4788-bc39-409644ce0f9b" target="_blank">Microsoft MultiPoint SDK</a>. Do you want to use multitouch in your application? This SDK provides you with ability to use up to 250 individual mouse devices simultaneously. And yes, it works with Windows XP SP2 too <img src='http://khason.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </li>
<li>Internet Explorer 8 for Windows <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=341c2ad5-8c3d-4347-8c03-08cdecd8852b#tm" target="_blank">XP x32</a>, <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=d044402c-84ce-472e-b3ac-9531f4feef47#tm" target="_blank">XP x64</a>, <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=79154fb4-c610-4a1e-811d-dfe0f1dd84d1&amp;displaylang=en" target="_blank">Vista x32</a>, <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=3aeda9db-b318-408a-860b-bc37bd6ab70c#tm" target="_blank">Vista x64</a> </li>
<li>In case, that you do no have Windows Vista or Windows Server 2008, you can <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=c2c27337-d4d1-4b9b-926d-86493c7da1aa#tm" target="_blank">download 30-day evaluation virtual hard disk of Windows Vista</a> or <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=86fa1bda-763b-4a1b-8e88-426228ed5c81#tm" target="_blank">Windows Server 2008 Enterprise</a> and see how it works <img src='http://khason.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . </li>
<li>Also a small present for my old friends (from my <a href="http://khason.net/blog/im-leaving-consulting-field-joined-new-project-for-full-time/" target="_blank">military consulting era</a>) – <a href="http://resources.esri.com/arcgisserver/apis/silverlight/" target="_blank">WPF and Silverlight APIs for GIS engine of ESRI</a>. Have a fun!</li>
</ul>
<p>That’s all by now, going to write a review for new book and will publish it soon (probably even before, you’ll finish with all those downloads and readings). So, stay tuned and be good people.</p>


<p>Related posts:<ol><li><a href='http://khason.net/tech/zone-of-pain-vs-zone-of-uselessness-or-code-analysis-with-ndepend/' rel='bookmark' title='Permanent Link: &ldquo;Zone of Pain vs. Zone of Uselessness&rdquo; or code analysis with NDepend'>&ldquo;Zone of Pain vs. Zone of Uselessness&rdquo; or code analysis with NDepend</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://khason.net/tech/some-new-in-mix-downloads/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bootstrapper for .NET framework version detector</title>
		<link>http://khason.net/tech/bootstrapper-for-net-framework-version-detector/</link>
		<comments>http://khason.net/tech/bootstrapper-for-net-framework-version-detector/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 17:22:26 +0000</pubDate>
		<dc:creator>Tamir</dc:creator>
				<category><![CDATA[TECH]]></category>
		<category><![CDATA[.NET 3.5]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[DEV]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[My tools]]></category>
		<category><![CDATA[promo]]></category>
		<category><![CDATA[soft]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[VSTS]]></category>
		<category><![CDATA[Work process]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[XNA]]></category>

		<guid isPermaLink="false">http://khason.net/tech/bootstrapper-for-net-framework-version-detector/</guid>
		<description><![CDATA[You wrote your .NET program, that can be used as stand alone portable application (such as it should be for Smart Client Apps), however you have to be sure, that necessary prerequisites (such as .NET framework) are installed on client’s machine. What to do? How to detect .NET framework version installed on target machine before [...]


Related posts:<ol><li><a href='http://khason.net/tech/some-new-in-mix-downloads/' rel='bookmark' title='Permanent Link: Some new in-mix downloads'>Some new in-mix downloads</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>You wrote your .NET program, that can be used as stand alone portable application (such as it should be for Smart Client Apps), however you have to be sure, that necessary prerequisites (such as .NET framework) are installed on client’s machine. What to do? How to detect .NET framework version installed on target machine before running .NET application. The answer is – to use unmanaged C++ bootstrapper, that invoke your application if correct version of framework is installed.</p>
<p><a title=".NET Framework Detector" href="http://khason.net/images/2009/02/whoooot.exe" target="_blank" rel="enclosure"><img title=".NET framework vrsion detector" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="212" alt=".NET framework vrsion detector" src="http://khason.net/images/2009/02/image.png" width="310" border="0" /></a> </p>
<p>Until now there are 15 possible .NET frameworks can be installed on client’s machine. Here the table of possible and official supported versions, <a href="http://support.microsoft.com/kb/318785" target="_blank">as appears in Q318785</a></p>
<table cellspacing="0" cellpadding="2" width="400" border="1">
<tbody>
<tr>
<td valign="top" width="200">.NET version</td>
<td valign="top" width="200">Actual version</td>
</tr>
<tr>
<td valign="top" width="200">3.5 SP1</td>
<td valign="top" width="200">3.5.30729.1</td>
</tr>
<tr>
<td valign="top" width="200">3.5</td>
<td valign="top" width="200">3.5.21022.8</td>
</tr>
<tr>
<td valign="top" width="200">3.0 SP2</td>
<td valign="top" width="200">3.0.4506.2152</td>
</tr>
<tr>
<td valign="top" width="200">3.0 SP1</td>
<td valign="top" width="200">3.0.4506.648</td>
</tr>
<tr>
<td valign="top" width="200">3.0</td>
<td valign="top" width="200">3.0.4506.30</td>
</tr>
<tr>
<td valign="top" width="200">2.0 SP2</td>
<td valign="top" width="200">2.0.50727.3053</td>
</tr>
<tr>
<td valign="top" width="200">2.0 SP1</td>
<td valign="top" width="200">2.0.50727.1433</td>
</tr>
<tr>
<td valign="top" width="200">2.0</td>
<td valign="top" width="200">2.0.50727.42</td>
</tr>
<tr>
<td valign="top" width="200">1.1 SP1</td>
<td valign="top" width="200">1.1.4322.2032</td>
</tr>
<tr>
<td valign="top" width="200">1.1 SP1 (in 32 bit version of Windows 2003)</td>
<td valign="top" width="200">1.1.4322.2300</td>
</tr>
<tr>
<td valign="top" width="200">1.1</td>
<td valign="top" width="200">1.1.4322.573</td>
</tr>
<tr>
<td valign="top" width="200">1.0 SP3</td>
<td valign="top" width="200">1.0.3705.6018</td>
</tr>
<tr>
<td valign="top" width="200">1.0 SP2</td>
<td valign="top" width="200">1.0.3705.288</td>
</tr>
<tr>
<td valign="top" width="200">1.0 SP1</td>
<td valign="top" width="200">1.0.3705.209</td>
</tr>
<tr>
<td valign="top" width="200">1.0</td>
<td valign="top" width="200">1.0.3705.0</td>
</tr>
</tbody>
</table>
<p>All of those versions are detectible by queering specific registry keys. However, in some cases, you need to load mscoree.dll and call “GETCOREVERSION” API to determine whether specific version of .NET is installed. You can read more about it <a href="http://msdn2.microsoft.com/library/ydh6b3yb.aspx" target="_blank">in MSDN</a>.</p>
<p>So it’s really simple to write small C++ application (or PowerShell applet), that queries registry and invoke your managed application. How to do this? You can either read about it in outstanding blog of <a href="http://blogs.msdn.com/astebner/archive/2009/01/31/9387659.aspx" target="_blank">Aaron Stebner</a>, who is Project Manager in XNA platform deployment team or <a href="http://khason.net/blog/action-required-smart-client-development-present-and-future/" target="_blank">attend my session next week</a> to learn do it yourself. We’ll speak about nifty ways to do it also. </p>
<p>Anyway, by now, you can use small stand alone program, I wrote a while ago, that will tell you all versions of .NET frameworks installed in target machine without any prerequisites. It can be run even from shared network location <img src='http://khason.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://khason.net/images/2009/02/whoooot.exe" target="_blank"><strong>Download whoooot.exe (13K) &gt;&gt;</strong></a></p>
<p>See you next week. </p>
<p>PS: Do not forget to <a href="http://www.codeplex.com/SnippetEditor/" target="_blank">download and install the new version</a> of <a href="http://khason.net/blog/visual-studio-snippet-designer/" target="_blank">Visual Studio Snippet Designer</a>, which is extremely useful tool by MVP <a href="http://msmvps.com/blogs/bill/" target="_blank">Bill McCarthy</a>, you’ll need it later next week…</p>
<p>Have a nice day and be good people.</p>


<p>Related posts:<ol><li><a href='http://khason.net/tech/some-new-in-mix-downloads/' rel='bookmark' title='Permanent Link: Some new in-mix downloads'>Some new in-mix downloads</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://khason.net/tech/bootstrapper-for-net-framework-version-detector/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Read and use FM radio (or any other USB HID device) from C#</title>
		<link>http://khason.net/blog/read-and-use-fm-radio-or-any-other-usb-hid-device-from-c/</link>
		<comments>http://khason.net/blog/read-and-use-fm-radio-or-any-other-usb-hid-device-from-c/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 20:42:18 +0000</pubDate>
		<dc:creator>Tamir</dc:creator>
				<category><![CDATA[BLOG]]></category>
		<category><![CDATA[.NET 3.5]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[DEV]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[Work process]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[WPF crossbow]]></category>

		<guid isPermaLink="false">http://khason.net/blog/read-and-use-fm-radio-or-any-other-usb-hid-device-from-c/</guid>
		<description><![CDATA[Last time we spoke about reading and decoding RDS information from FM receivers. Also we already know how to stream sound from DirectSound compatible devices. However, before we can do it, we should be able to “speak” with such devices. So, today we’ll spoke about detection and reading information from Radio USB adapters (actually from [...]


Related posts:<ol><li><a href='http://khason.net/itpro/quick-it-tip-how-to-build-bootable-usb-stick/' rel='bookmark' title='Permanent Link: Quick IT tip: How to build bootable USB stick'>Quick IT tip: How to build bootable USB stick</a></li>
<li><a href='http://khason.net/dev/inotifypropertychanged-auto-wiring-or-how-to-get-rid-of-redundant-code/' rel='bookmark' title='Permanent Link: INotifyPropertyChanged auto wiring or how to get rid of redundant code'>INotifyPropertyChanged auto wiring or how to get rid of redundant code</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Last time <a href="http://khason.net/blog/reading-and-decoding-rds-radio-data-system-in-c/">we spoke about reading and decoding RDS information from FM receivers</a>. Also <a href="http://khason.net/blog/capturing-and-streaming-sound-by-using-directsound-with-c/">we already know how to stream sound from DirectSound compatible devices</a>. However, before we can do it, we should be able to “speak” with such devices. So, today we’ll spoke about detection and reading information from Radio USB adapters (actually from any Human Input Devices). Let’s start.</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="USB FM HID" border="0" alt="USB FM HID" src="http://khason.net/images/2008/12/image-460dcf0b.png" width="240" height="211" /> </p>
<p>First, if you want to do it, go and buy such device. The are not a lot of alternatives, but if you’ll seek, you’ll find it very quickly.</p>
<p>So, let’s start. First of all, we’ll use platform invoke to get and set the information. Also, we have to preserve handle of the device from being collected by GC. After we’ll finish using the device, we’ll have to dispose it. Thus it makes sense to inherit from SafeHandle and IDisposable.</p>
<blockquote><p>[SecurityPermission(SecurityAction.InheritanceDemand, UnmanagedCode = true)]     <br />[SecurityPermission(SecurityAction.Demand, UnmanagedCode = true)]      <br />public class USBDevice : SafeHandleZeroOrMinusOneIsInvalid, IDisposable {</p>
</blockquote>
<p>Next, we’ll set a number of arguments, that will be in use during the device lifetime.</p>
<blockquote><p>public uint ProductID { get; private set; }     <br />public uint VendorID { get; private set; }      <br />public uint VersionNumber { get; private set; }      <br />public string Name { get; private set; }      <br />public string SerialNumber { get; private set; }      <br />public override bool IsInvalid { get { return !isValid; } } </p>
<p>internal ushort FeatureReportLength { get; private set; }     <br />internal ushort[] Registers { get; set; }</p>
</blockquote>
<p>Now, we have to find it. The best way of detection human input devices is by product and vendor IDs. Those values are always unique for certain device type.</p>
<blockquote><p>[SecurityPermission(SecurityAction.Demand, UnmanagedCode = true)]     <br />internal USBDevice(uint pid, uint vid) : base(true) { findDevice(pid, vid); }</p>
</blockquote>
<p>Next step is to find a device. To do this, we have to provide extern interfaces to methods of hid.dll and setupapi.dll. Here all methods we will use in our class</p>
<blockquote><p>[SuppressUnmanagedCodeSecurity()]     <br />internal static class Native {      <br />&#160;&#160; #region methods      <br />&#160;&#160; [DllImport(&quot;hid.dll&quot;, SetLastError = true)]      <br />&#160;&#160; internal static extern void HidD_GetHidGuid(      <br />&#160;&#160;&#160;&#160;&#160; ref Guid lpHidGuid); </p>
<p>&#160;&#160; [DllImport(&quot;hid.dll&quot;, SetLastError = true)]     <br />&#160;&#160; internal static extern bool HidD_GetAttributes(      <br />&#160;&#160;&#160;&#160;&#160; IntPtr hDevice,      <br />&#160;&#160;&#160;&#160;&#160; out HIDD_ATTRIBUTES Attributes); </p>
<p>&#160;&#160; [DllImport(&quot;hid.dll&quot;, SetLastError = true)]     <br />&#160;&#160; internal static extern bool HidD_GetPreparsedData(      <br />&#160;&#160;&#160;&#160;&#160; IntPtr hDevice,      <br />&#160;&#160;&#160;&#160;&#160; out IntPtr hData); </p>
<p>&#160;&#160; [DllImport(&quot;hid.dll&quot;, SetLastError = true)]     <br />&#160;&#160; internal static extern bool HidD_FreePreparsedData(      <br />&#160;&#160;&#160;&#160;&#160; IntPtr hData); </p>
<p>&#160;&#160; [DllImport(&quot;hid.dll&quot;, SetLastError = true)]     <br />&#160;&#160; internal static extern bool HidP_GetCaps(      <br />&#160;&#160;&#160;&#160;&#160; IntPtr hData,      <br />&#160;&#160;&#160;&#160;&#160; out HIDP_CAPS capabilities); </p>
<p>&#160;&#160; [DllImport(&quot;hid.dll&quot;, SetLastError = true, CallingConvention = CallingConvention.StdCall)]     <br />&#160;&#160; internal static extern bool HidD_GetFeature(      <br />&#160;&#160;&#160;&#160;&#160; IntPtr hDevice,      <br />&#160;&#160;&#160;&#160;&#160; IntPtr hReportBuffer,      <br />&#160;&#160;&#160;&#160;&#160; uint ReportBufferLength); </p>
<p>&#160;&#160; [DllImport(&quot;hid.dll&quot;, SetLastError = true, CallingConvention = CallingConvention.StdCall)]     <br />&#160;&#160; internal static extern bool HidD_SetFeature(      <br />&#160;&#160;&#160;&#160;&#160; IntPtr hDevice,      <br />&#160;&#160;&#160;&#160;&#160; IntPtr ReportBuffer,      <br />&#160;&#160;&#160;&#160;&#160; uint ReportBufferLength); </p>
<p>&#160;&#160; [DllImport(&quot;hid.dll&quot;, SetLastError = true, CallingConvention = CallingConvention.StdCall)]     <br />&#160;&#160; internal static extern bool HidD_GetProductString(      <br />&#160;&#160;&#160;&#160;&#160; IntPtr hDevice,       <br />&#160;&#160;&#160;&#160;&#160; IntPtr Buffer,       <br />&#160;&#160;&#160;&#160;&#160; uint BufferLength); </p>
<p>&#160;&#160; [DllImport(&quot;hid.dll&quot;, SetLastError = true, CallingConvention = CallingConvention.StdCall)]     <br />&#160;&#160; internal static extern bool HidD_GetSerialNumberString(      <br />&#160;&#160;&#160;&#160;&#160; IntPtr hDevice,      <br />&#160;&#160;&#160;&#160;&#160; IntPtr Buffer,      <br />&#160;&#160;&#160;&#160;&#160; uint BufferLength); </p>
<p>&#160;&#160; [DllImport(&quot;setupapi.dll&quot;, SetLastError = true)]     <br />&#160;&#160; internal static extern IntPtr SetupDiGetClassDevs(      <br />&#160;&#160;&#160;&#160;&#160; ref Guid ClassGuid,      <br />&#160;&#160;&#160;&#160;&#160; [MarshalAs(UnmanagedType.LPTStr)] string Enumerator,      <br />&#160;&#160;&#160;&#160;&#160; IntPtr hwndParent,      <br />&#160;&#160;&#160;&#160;&#160; UInt32 Flags); </p>
<p>&#160;&#160; [DllImport(&quot;setupapi.dll&quot;, SetLastError = true)]     <br />&#160;&#160; internal static extern bool SetupDiEnumDeviceInterfaces(      <br />&#160;&#160;&#160;&#160;&#160; IntPtr DeviceInfoSet,      <br />&#160;&#160;&#160;&#160;&#160; int DeviceInfoData,      <br />&#160;&#160;&#160;&#160;&#160; ref&#160; Guid lpHidGuid,      <br />&#160;&#160;&#160;&#160;&#160; uint MemberIndex,      <br />&#160;&#160;&#160;&#160;&#160; ref&#160; SP_DEVICE_INTERFACE_DATA lpDeviceInterfaceData); </p>
<p>&#160;&#160; [DllImport(&quot;setupapi.dll&quot;, SetLastError = true)]     <br />&#160;&#160; internal static extern bool SetupDiGetDeviceInterfaceDetail(      <br />&#160;&#160;&#160;&#160;&#160; IntPtr DeviceInfoSet,      <br />&#160;&#160;&#160;&#160;&#160; ref SP_DEVICE_INTERFACE_DATA lpDeviceInterfaceData,      <br />&#160;&#160;&#160;&#160;&#160; IntPtr hDeviceInterfaceDetailData,      <br />&#160;&#160;&#160;&#160;&#160; uint detailSize,      <br />&#160;&#160;&#160;&#160;&#160; out uint requiredSize,      <br />&#160;&#160;&#160;&#160;&#160; IntPtr hDeviceInfoData); </p>
<p>&#160;&#160; [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]     <br />&#160;&#160; [DllImport(&quot;kernel32.dll&quot;, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]      <br />&#160;&#160; internal static extern IntPtr CreateFile(      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; string lpFileName,      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; uint dwDesiredAccess,      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; uint dwShareMode,      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IntPtr SecurityAttributes,      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; uint dwCreationDisposition,      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; uint dwFlagsAndAttributes,      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IntPtr hTemplateFile); </p>
<p>&#160;&#160; [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]     <br />&#160;&#160; [DllImport(&quot;kernel32.dll&quot;, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall, SetLastError = true)]      <br />&#160;&#160; internal static extern bool CloseHandle(IntPtr hHandle);</p>
</blockquote>
<p>Also, we will need a number of structures, such as device attributes and capabilities.</p>
<blockquote><p>[StructLayout(LayoutKind.Sequential)]     <br />internal struct SP_DEVICE_INTERFACE_DATA {      <br />&#160;&#160; public int cbSize;      <br />&#160;&#160; public Guid InterfaceClassGuid;      <br />&#160;&#160; public int Flags;      <br />&#160;&#160; public int Reserved;      <br />} </p>
<p>[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]     <br />internal class PSP_DEVICE_INTERFACE_DETAIL_DATA {      <br />&#160;&#160; public int cbSize;      <br />&#160;&#160; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]      <br />&#160;&#160; public string DevicePath;      <br />} </p>
<p>[StructLayout(LayoutKind.Sequential)]     <br />internal struct HIDD_ATTRIBUTES {      <br />&#160;&#160; public int Size; // = sizeof (struct _HIDD_ATTRIBUTES) = 10      <br />&#160;&#160; public UInt16 VendorID;      <br />&#160;&#160; public UInt16 ProductID;      <br />&#160;&#160; public UInt16 VersionNumber;      <br />}      <br />[StructLayout(LayoutKind.Sequential)]      <br />internal struct HIDP_CAPS {      <br />&#160;&#160; public UInt16 Usage;      <br />&#160;&#160; public UInt16 UsagePage;      <br />&#160;&#160; public UInt16 InputReportByteLength;      <br />&#160;&#160; public UInt16 OutputReportByteLength;      <br />&#160;&#160; public UInt16 FeatureReportByteLength;      <br />&#160;&#160; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 17)]      <br />&#160;&#160; public UInt16[] Reserved;      <br />&#160;&#160; public UInt16 NumberLinkCollectionNodes;      <br />&#160;&#160; public UInt16 NumberInputButtonCaps;      <br />&#160;&#160; public UInt16 NumberInputValueCaps;      <br />&#160;&#160; public UInt16 NumberInputDataIndices;      <br />&#160;&#160; public UInt16 NumberOutputButtonCaps;      <br />&#160;&#160; public UInt16 NumberOutputValueCaps;      <br />&#160;&#160; public UInt16 NumberOutputDataIndices;      <br />&#160;&#160; public UInt16 NumberFeatureButtonCaps;      <br />&#160;&#160; public UInt16 NumberFeatureValueCaps;      <br />&#160;&#160; public UInt16 NumberFeatureDataIndices;      <br />}</p>
</blockquote>
<p>And a number of system constants</p>
<blockquote><p>internal const uint DIGCF_PRESENT = 0&#215;00000002;     <br />internal const uint DIGCF_DEVICEINTERFACE = 0&#215;00000010;      <br />internal const uint GENERIC_READ = 0&#215;80000000;      <br />internal const uint GENERIC_WRITE = 0&#215;40000000;      <br />internal const uint FILE_SHARE_READ = 0&#215;00000001;      <br />internal const uint FILE_SHARE_WRITE = 0&#215;00000002;      <br />internal const int OPEN_EXISTING = 3;      <br />internal const int FILE_FLAG_OVERLAPPED = 0&#215;40000000;      <br />internal const uint MAX_USB_DEVICES = 16;</p>
</blockquote>
<p>Now, we are ready to start. So let’s find all devices and get its information</p>
<blockquote><p>Native.HidD_GetHidGuid(ref _hidGuid);     <br />hHidDeviceInfo = Native.SetupDiGetClassDevs(ref _hidGuid, null, IntPtr.Zero, Native.DIGCF_PRESENT | Native.DIGCF_DEVICEINTERFACE);</p>
</blockquote>
<p>Now, if a handle we get is valid, we should search our specific device. For this purpose, we have to read device interface information and then get details info about this device.</p>
<blockquote><p>if (hHidDeviceInfo.ToInt32() &gt; -1) {     <br />&#160;&#160; uint i = 0;      <br />&#160;&#160; while (!isValid &amp;&amp; i &lt; Native.MAX_USB_DEVICES) {      <br />&#160;&#160;&#160;&#160;&#160; var hidDeviceInterfaceData = new Native.SP_DEVICE_INTERFACE_DATA();      <br />&#160;&#160;&#160;&#160;&#160; hidDeviceInterfaceData.cbSize = Marshal.SizeOf(hidDeviceInterfaceData);      <br />&#160;&#160;&#160;&#160;&#160; if (Native.SetupDiEnumDeviceInterfaces(hHidDeviceInfo, 0, ref _hidGuid, i, ref hidDeviceInterfaceData)) {</p>
</blockquote>
<p>Once we have all this and information is valid, let’s detect its capabilities</p>
<blockquote><p>bool detailResult;     <br />uint length, required;      <br />Native.SetupDiGetDeviceInterfaceDetail(hHidDeviceInfo, ref hidDeviceInterfaceData, IntPtr.Zero, 0, out length, IntPtr.Zero);      <br />var hidDeviceInterfaceDetailData = new Native.PSP_DEVICE_INTERFACE_DETAIL_DATA();      <br />hidDeviceInterfaceDetailData.cbSize = 5; //DWORD cbSize (size 4) + Char[0] (size 1) for 32bit only!      <br />var hDeviceInterfaceDetailData = Marshal.AllocHGlobal(Marshal.SizeOf(hidDeviceInterfaceDetailData));      <br />Marshal.StructureToPtr(hidDeviceInterfaceDetailData, hDeviceInterfaceDetailData, true);      <br />detailResult = Native.SetupDiGetDeviceInterfaceDetail(hHidDeviceInfo, ref hidDeviceInterfaceData, hDeviceInterfaceDetailData, length, out required, IntPtr.Zero);      <br />Marshal.PtrToStructure(hDeviceInterfaceDetailData, hidDeviceInterfaceDetailData);      <br />if (detailResult) {</p>
</blockquote>
<p>To do this, we have to create memory file first and then share device attributes by using this file.</p>
<blockquote><p>base.handle = Native.CreateFile(hidDeviceInterfaceDetailData.DevicePath,      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Native.GENERIC_READ |      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Native.GENERIC_WRITE,      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Native.FILE_SHARE_READ |      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Native.FILE_SHARE_WRITE,       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IntPtr.Zero,      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Native.OPEN_EXISTING,      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Native.FILE_FLAG_OVERLAPPED,       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IntPtr.Zero);      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (base.handle.ToInt32() &gt; -1) {      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Native.HIDD_ATTRIBUTES hidDeviceAttributes;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (Native.HidD_GetAttributes(base.handle, out hidDeviceAttributes)) {</p>
</blockquote>
<p>All the rest is straight forward. Just compare info retrieved with one we already have. And, of cause, release all resources were used (remember, we’re in win32 api world!)</p>
<blockquote><p>if ((hidDeviceAttributes.VendorID == vid) &amp;&amp; (hidDeviceAttributes.ProductID == pid)) {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; isValid = true;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ProductID = pid;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; VendorID = vid;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; VersionNumber = hidDeviceAttributes.VersionNumber;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IntPtr buffer = Marshal.AllocHGlobal(126);//max alloc for string;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (Native.HidD_GetProductString(this.handle, buffer, 126)) Name = Marshal.PtrToStringAuto(buffer);      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (Native.HidD_GetSerialNumberString(this.handle, buffer, 126)) SerialNumber = Marshal.PtrToStringAuto(buffer);      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Marshal.FreeHGlobal(buffer);      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var capabilities = new Native.HIDP_CAPS();      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; IntPtr hPreparsedData;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (Native.HidD_GetPreparsedData(this.handle, out hPreparsedData)) {      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (Native.HidP_GetCaps(hPreparsedData, out capabilities)) FeatureReportLength = capabilities.FeatureReportByteLength;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Native.HidD_FreePreparsedData(hPreparsedData);      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break;      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; } else {      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Native.CloseHandle(base.handle);      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Marshal.FreeHGlobal(hDeviceInterfaceDetailData);      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; i++; </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
</blockquote>
<p>Now we have a handle to our device and can manipulate it. Like this:</p>
<blockquote><p>using (var device = USBRadioDevice.FindDevice(0&#215;0000, 0&#215;1111)) {     <br />…      <br />}</p>
</blockquote>
<p>But we still have to provide methods for such usage. Here there are no very complicated code.</p>
<blockquote><p>public static USBDevice FindDevice(uint pid, uint vid) {     <br />&#160;&#160; var device = new USBDevice(pid,vid);      <br />&#160;&#160; var fillRegisters = device.InitRegisters();      <br />&#160;&#160; if (!device.IsInvalid &amp;&amp; fillRegisters) return device;      <br />&#160;&#160; else throw new ArgumentOutOfRangeException(string.Format(&quot;Human input device {0} was not found.&quot;, pid));      <br />} </p>
<p>public override string ToString() {     <br />&#160;&#160; return string.Format(&quot;{0} (Product:{1:x}, Vendor:{2:x}, Version:{3:x}, S/N:{4})&quot;, Name, ProductID, VendorID, VersionNumber, SerialNumber);      <br />} </p>
<p>[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]     <br />protected override bool ReleaseHandle() {      <br />&#160;&#160; return Native.CloseHandle(base.handle);      <br />} </p>
<p>#region IDisposable Members     <br />public void Dispose() {      <br />&#160;&#160; Dispose(true);      <br />&#160;&#160; GC.SuppressFinalize(this); </p>
<p>}     <br />[SecurityPermission(SecurityAction.Demand, UnmanagedCode = true)]      <br />void IDisposable.Dispose() {      <br />&#160;&#160; if (base.handle != null &amp;&amp; !base.IsInvalid) {      <br />&#160;&#160;&#160;&#160;&#160; // Free the handle      <br />&#160;&#160;&#160;&#160;&#160; base.Dispose();      <br />&#160;&#160; }      <br />} </p>
<p>#endregion</p>
</blockquote>
<p>We done. Have a nice day and be good people.</p>


<p>Related posts:<ol><li><a href='http://khason.net/itpro/quick-it-tip-how-to-build-bootable-usb-stick/' rel='bookmark' title='Permanent Link: Quick IT tip: How to build bootable USB stick'>Quick IT tip: How to build bootable USB stick</a></li>
<li><a href='http://khason.net/dev/inotifypropertychanged-auto-wiring-or-how-to-get-rid-of-redundant-code/' rel='bookmark' title='Permanent Link: INotifyPropertyChanged auto wiring or how to get rid of redundant code'>INotifyPropertyChanged auto wiring or how to get rid of redundant code</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://khason.net/blog/read-and-use-fm-radio-or-any-other-usb-hid-device-from-c/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Asus R50A UMPC review</title>
		<link>http://khason.net/blog/asus-r50a-umpc-review/</link>
		<comments>http://khason.net/blog/asus-r50a-umpc-review/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 13:26:00 +0000</pubDate>
		<dc:creator>Tamir</dc:creator>
				<category><![CDATA[BLOG]]></category>
		<category><![CDATA[blogging general]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[help]]></category>
		<category><![CDATA[OFFTOPIC]]></category>
		<category><![CDATA[promo]]></category>
		<category><![CDATA[thoughts]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[Vista Battery Saver]]></category>

		<guid isPermaLink="false">http://khason.net/blog/asus-r50a-umpc-review/</guid>
		<description><![CDATA[So, I got new branded Asus R50A UMPC for test. This ultra mobile machine with 5.6&#8243; WSVGA (1024&#215;768) screen, based on Intel US15W chipset, comes with Intel Atom Z520 (1.33 Ghz, 533Mhz) processor, 1Gb of RAM and 20GB SSD. Also it has 3.5G mobile unit, integrated 802.11b/g network card and GPS. First impression was very [...]


Related posts:<ol><li><a href='http://khason.net/blog/book-review-c-2008-and-2005-threaded-programming/' rel='bookmark' title='Permanent Link: Book review: C# 2008 and 2005 Threaded Programming'>Book review: C# 2008 and 2005 Threaded Programming</a></li>
<li><a href='http://khason.net/blog/windows-7-dry-run-or-how-things-should-be-done-to-correct-old-mistakes/' rel='bookmark' title='Permanent Link: Windows 7 &ndash; dry run or how things should be done to correct old mistakes'>Windows 7 &ndash; dry run or how things should be done to correct old mistakes</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>So, I got new branded <a href="http://www.asus.com/products.aspx?l1=5&amp;l2=25&amp;l3=722&amp;l4=0&amp;model=2295&amp;modelmenu=1" target="_blank" mce_href="http://www.asus.com/products.aspx?l1=5&amp;l2=25&amp;l3=722&amp;l4=0&amp;model=2295&amp;modelmenu=1">Asus R50A UMPC</a> for test. This ultra mobile machine with 5.6&#8243; WSVGA (1024&#215;768) screen, based on Intel US15W chipset, comes with Intel Atom Z520 (1.33 Ghz, 533Mhz) processor, 1Gb of RAM and 20GB SSD. Also it has 3.5G mobile unit, integrated 802.11b/g network card and GPS. First impression was very cool. Slick design, big screen build in fingerprint reader.</p>
<p>&nbsp;<a href="http://www.flickr.com/photos/dedjo/3027945780/" target="_blank" mce_href="http://www.flickr.com/photos/dedjo/3027945780/"><img src="http://farm4.static.flickr.com/3034/3027945780_697d7fff14.jpg" mce_src="http://farm4.static.flickr.com/3034/3027945780_697d7fff14.jpg"/></a> </p>
<p><a href="http://www.flickr.com/photos/dedjo/3027224451/" target="_blank" mce_href="http://www.flickr.com/photos/dedjo/3027224451/"><img src="http://farm4.static.flickr.com/3191/3027224451_296000114b.jpg" mce_src="http://farm4.static.flickr.com/3191/3027224451_296000114b.jpg"/></a> </p>
<p>What in the box? Power adapter (110/220V), compact keyboard, bunch of cables, extra stilus and handling strap.</p>
<p><a href="http://www.flickr.com/photos/dedjo/3027970572" target="_blank" mce_href="http://www.flickr.com/photos/dedjo/3027970572"><img src="http://farm4.static.flickr.com/3007/3027970572_feba1fdcc8.jpg" mce_src="http://farm4.static.flickr.com/3007/3027970572_feba1fdcc8.jpg"/></a> </p>
<p>What else this machine has? Microcard reader, three mini-usb sockets, one regular USB and camera. Looks like pretty fine machine, but not for €1K+ price tag. But who cares when we buy real good gadget? However, my euphoria disappears during 6 minutes startup (this was not first startup &#8211; first took more, then 15 minutes).</p>
<p>It was preinstalled with Windows Vista SP1 Ultimate (for this tiny machine) aside with huge amount of Asus junkware, so it was was even unable even to calculate Vista experience score</p>
<p><a href="http://www.flickr.com/photos/dedjo/3027956200/" target="_blank" mce_href="http://www.flickr.com/photos/dedjo/3027956200/"><img src="http://farm4.static.flickr.com/3140/3027956200_c13d658754.jpg" mce_src="http://farm4.static.flickr.com/3140/3027956200_c13d658754.jpg"/></a> </p>
<p>Also it has no drivers for strange device, named &#8220;Mini Card&#8221; (with factory branded Asus OS installation)</p>
<p><a href="http://www.flickr.com/photos/dedjo/3027130301/" target="_blank" mce_href="http://www.flickr.com/photos/dedjo/3027130301/"><img src="http://farm4.static.flickr.com/3026/3027130301_fb08e0b099.jpg" mce_src="http://farm4.static.flickr.com/3026/3027130301_fb08e0b099.jpg"/></a> </p>
<p>Well, it&#8217;s probably because I&#8217;m still not connected to internet&#8230; Let&#8217;s connect office WiFi&#8230; Err&#8230; It has some troubles with wireless network discovery &#8211; 2 bars for 12 feet distance from access point (my W500 has all 5) and no other networks (with 4 and less bars on another machine). Let&#8217;s connect it. Hm, &#8220;unable to connect&#8221;&#8230; Weird. Leave it by now. This is multimedia device, so, probably, video will play better? Well, it failed also with playback of Windows sample movie. So maybe it has great battery life? Not really. Without doing anything new 2 cells, 2600mAh battery enough for less, then two hours (with <a href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Vista+Battery+Saver/default.aspx" target="_blank" mce_href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Vista+Battery+Saver/default.aspx">vista battery saver</a> it extended to 3, while this device does not support aero interface).</p>
<p>But the final accord was this one (one again &#8211; this is branded Asus installation):</p>
<p>&nbsp;<img src="http://khason.net/images/2008/12/image-dcd4f35d-1091-4cd4-a3da-81d8da693e6d.png" alt="image" mce_src="http://khason.net/images/2008/12/image-dcd4f35d-1091-4cd4-a3da-81d8da693e6d.png" width="529" border="0" height="397"/> </p>
<p>Bottom line: 0<b>/5. I paid $360 for my wife&#8217;s pink <a href="http://www.amazon.com/gp/product/B001DL2BUM?ie=UTF8&amp;tag=israkniga-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001DL2BUM" mce_href="http://www.amazon.com/gp/product/B001DL2BUM?ie=UTF8&amp;tag=israkniga-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B001DL2BUM">Acer Aspire One</a><img src="http://www.assoc-amazon.com/e/ir?t=israkniga-20&amp;l=as2&amp;o=1&amp;a=B001DL2BUM" style="border-style: none ! important; margin: 0px;" alt="" mce_src="http://www.assoc-amazon.com/e/ir?t=israkniga-20&amp;l=as2&amp;o=1&amp;a=B001DL2BUM" width="1" border="0" height="1"/> and got much better computer (it even has camera).</b></p>
<p><a href="http://twitpic.com/photos/tamir" mce_href="http://twitpic.com/photos/tamir"><img src="http://khason.net/images/2008/12/image-4.png" alt="image" mce_src="http://khason.net/images/2008/12/image-4.png" width="529" border="0" height="397"/></a> </p>
<p>The only thing remains enigma for me is <u>why, the hell, this piece of crap costs more, then €1,000</u><u>?</u></p>
<p>Have a nice day and be good people &#8211; do not buy this machine!</p>


<p>Related posts:<ol><li><a href='http://khason.net/blog/book-review-c-2008-and-2005-threaded-programming/' rel='bookmark' title='Permanent Link: Book review: C# 2008 and 2005 Threaded Programming'>Book review: C# 2008 and 2005 Threaded Programming</a></li>
<li><a href='http://khason.net/blog/windows-7-dry-run-or-how-things-should-be-done-to-correct-old-mistakes/' rel='bookmark' title='Permanent Link: Windows 7 &ndash; dry run or how things should be done to correct old mistakes'>Windows 7 &ndash; dry run or how things should be done to correct old mistakes</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://khason.net/blog/asus-r50a-umpc-review/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Programming for Windows 7</title>
		<link>http://khason.net/blog/programming-for-windows-7/</link>
		<comments>http://khason.net/blog/programming-for-windows-7/#comments</comments>
		<pubDate>Sun, 09 Nov 2008 12:12:38 +0000</pubDate>
		<dc:creator>Tamir</dc:creator>
				<category><![CDATA[BLOG]]></category>
		<category><![CDATA[blogging general]]></category>
		<category><![CDATA[demos]]></category>
		<category><![CDATA[DirectX]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[promo]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[TECH]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[Vista Battery Saver]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[XPS]]></category>

		<guid isPermaLink="false">http://khason.net/blog/programming-for-windows-7/</guid>
		<description><![CDATA[Well, Windows 7 is going to be released by the end of next year. This is great news, because it seemed, that Microsoft finally understand how to get the best of Windows Vista and make it to work not only on monster machines. 
 
It even works on new brandy my wife&#8217;s pinky machine. And [...]


Related posts:<ol><li><a href='http://khason.net/blog/windows-7-dry-run-or-how-things-should-be-done-to-correct-old-mistakes/' rel='bookmark' title='Permanent Link: Windows 7 &ndash; dry run or how things should be done to correct old mistakes'>Windows 7 &ndash; dry run or how things should be done to correct old mistakes</a></li>
<li><a href='http://khason.net/blog/book-review-c-2008-and-2005-threaded-programming/' rel='bookmark' title='Permanent Link: Book review: C# 2008 and 2005 Threaded Programming'>Book review: C# 2008 and 2005 Threaded Programming</a></li>
<li><a href='http://khason.net/tech/some-new-in-mix-downloads/' rel='bookmark' title='Permanent Link: Some new in-mix downloads'>Some new in-mix downloads</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Well, Windows 7 is going to be released by the end of next year. This is great news, because it seemed, that Microsoft finally understand how to get the best of Windows Vista and make it to work not only on <a href="http://www.top500.org/">monster machines</a>. </p>
<p><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://khason.net/images/2008/12/image-3.png" width="600" height="397"/> </p>
<p>It even works on new brandy my wife&#8217;s pinky machine. And if it works there and my wife is happy with it, this OS going to be very impressive.</p>
<p><img border="0" alt="image" src="http://khason.net/images/2008/12/image-58bf6973-bdc1-44d9-8649-f24e6255e65f.png" width="529" height="397"/> </p>
<p>But from the other hand, we, as developers should be ready today to developer Windows 7 ready application (by the way, <a target="_blank" href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Vista+Battery+Saver/default.aspx">Vista Battery Saver</a> works for Windows 7 as well as for Windows Vista, in spite of the fact, that power management in Windows 7 was improved dramatically). So let&#8217;s start!</p>
<p>First thing we need is to read big <a target="_blank" href="http://code.msdn.microsoft.com/Win7DeveloperGuide/Release/ProjectReleases.aspx">Windows 7 Developer Guide</a>. This document will explain most of new features for developers to build applications right. What is includes?</p>
<h3>Windows Driver Kit (WDK) 3.0</h3>
<p>Basically, Windows 7 works with Vista drivers, however, hibernation, power management, networking, PREfast will work much better. You also will have new WMI access for reliability monitors and ACPI. </p>
<h3>Management and deployment</h3>
<p>By default Windows 7 uses PowerShell 2.0 and Windows Installer. For PowerShell it includes enhanced cmdlets to manage Active Directory, IIS, etc. For Windows Installer, you finally can build &#8220;chainers&#8221; by yourself (the same approach, used for latest deployment of Microsoft products such as <a target="_blank" href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Silverlight/default.aspx">Silverlight</a>, <a target="_blank" href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Visual+Studio/default.aspx">Visual Studio 2008 SP1</a> etc.) Also, you can get advantage by using Windows Filtering Platform (Firewall) and User Account Control (UAC) from inside your application by using new APIs. </p>
<h3>Performance</h3>
<p>The most significant change in Windows 7 for end-user point of view is improved performance. Windows 7 kernel is much smaller, that kernel of Windows Vista. Also it uses specific patterns to decrease background activities on low power, based on system triggers. New user-mode and kernel-mode APIs are used by Windows Drivers Foundation much more efficiently. Also system services are much smarter. For example, DCIA starts only when you connect new hardware. After drivers were installed the service shuts down. The same approach used by domain join, GP changes, new IP fetching etc. Windows 7 knows to run and stop services, based on system events, which decreases average work load and enhances whole system performance. </p>
<h3>Multi-touch gestures and Interia API and used interface in general</h3>
<p>Yes, you can use this API for your applications. Finally we can have more, then just mouse. And it is not only about multiple mouse devices. We can use single finder panning, raw touch input data, internal multitouch ink recognition, which is also supports math. Also it uses build-in MathML export feature. </p>
<p>There are a lot of other enhancements, such as smart bars, windows&#8217; stacking, gadget desktop (it does not eat battery as external process anymore), system ribbon menu integration. etc</p>
<h3>Graphics</h3>
<p>Direct 11, new Direct2D, DirectWrite (we can turn text anti-aliasing for small fonts, hurrah!), improved WIC, DX/GDI interoperability on system level with automatic fallback for weak hardware (yes, you should not be worry about it anymore). Also new video and audio format support with <u>human readable interfaces</u>. Yes, no more DirectDraw hacks. We can use new high level interfaces such as MFPlay to manage playbacks, Source Reader for decoding, Sink Writer for transcoders and re-coding compressions.</p>
<h3>Web and communication</h3>
<p>WCF is inside, as well as distributed routing table for peer-to-peer operations. BranchCache &#8211; new technology to reduce WAN traffic and latency. </p>
<p>Also Windows 7 is compatible with <a target="_blank" href="http://www.opensearch.org">OpenSearch</a> (I told, that Microsoft does not know to build search engines). Sharepoint integration and environment sensors platform, that can be used either for desktop and web applications. </p>
<p>There are much more features, that makes Windows 7 to pretend to be very good operation system. If you want to learn more about all those Windows 7 new features, I highly advice you to <a target="_blank" href="http://code.msdn.microsoft.com/Win7DeveloperGuide/Release/ProjectReleases.aspx">download and read this document</a>. It includes most of new features of new OS with explanations and screenshots to make your learn and understand what can your future application do with all those new features.</p>
<p>Have a nice day and be good people.</p>
<p>BTW, if you have PDC version of Windows 7 and want to unlock it for using of some cool features, <a target="_blank" href="http://channel9.msdn.com/pdc2008/KYN02/">introduced during keynotes</a>, it worth <a target="_blank" href="http://www.withinwindows.com/2008/11/02/flashy-windows-7-bits-protected-by-elaborate-scheme-workaround/">to visit here</a> and learn how to <img src='http://khason.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Download </strong><a href="http://code.msdn.microsoft.com/Win7DeveloperGuide"><strong>Windows 7 Developer Guide</strong></a><strong> and start programming.</strong></p>


<p>Related posts:<ol><li><a href='http://khason.net/blog/windows-7-dry-run-or-how-things-should-be-done-to-correct-old-mistakes/' rel='bookmark' title='Permanent Link: Windows 7 &ndash; dry run or how things should be done to correct old mistakes'>Windows 7 &ndash; dry run or how things should be done to correct old mistakes</a></li>
<li><a href='http://khason.net/blog/book-review-c-2008-and-2005-threaded-programming/' rel='bookmark' title='Permanent Link: Book review: C# 2008 and 2005 Threaded Programming'>Book review: C# 2008 and 2005 Threaded Programming</a></li>
<li><a href='http://khason.net/tech/some-new-in-mix-downloads/' rel='bookmark' title='Permanent Link: Some new in-mix downloads'>Some new in-mix downloads</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://khason.net/blog/programming-for-windows-7/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>The Original Tetris on Windows Vista</title>
		<link>http://khason.net/blog/the-original-tetris-on-windows-vista/</link>
		<comments>http://khason.net/blog/the-original-tetris-on-windows-vista/#comments</comments>
		<pubDate>Sun, 13 Jul 2008 22:12:07 +0000</pubDate>
		<dc:creator>Tamir</dc:creator>
				<category><![CDATA[BLOG]]></category>
		<category><![CDATA[blogging general]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[soft]]></category>
		<category><![CDATA[thoughts]]></category>
		<category><![CDATA[Vista]]></category>

		<guid isPermaLink="false">http://khason.net/blog/the-original-tetris-on-windows-vista/</guid>
		<description><![CDATA[For last days I’m very busy with Bidi support for Silverlight development. Working a lot of hours in order to finish it until TechEd. So, I’m very tired and need relaxation. What can be better, then Tetris? But, there are millions of Tetrises. What to choose? What’s the question? The original one. 
 
This genius [...]


Related posts:<ol><li><a href='http://khason.net/blog/windows-7-dry-run-or-how-things-should-be-done-to-correct-old-mistakes/' rel='bookmark' title='Permanent Link: Windows 7 &ndash; dry run or how things should be done to correct old mistakes'>Windows 7 &ndash; dry run or how things should be done to correct old mistakes</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>For last days I’m very busy with <a href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Work+process/default.aspx">Bidi support for Silverlight development</a>. Working a lot of hours in order to finish it until <a href="http://khason.net/blog/presenting-at-teched-developers-south-africa-2008-durban/">TechEd</a>. So, I’m very tired and need relaxation. What can be better, then Tetris? But, there are millions of Tetrises. What to choose? What’s the question? <a href="http://vadim.oversigma.com/Tetris.htm">The original one</a>. </p>
<p><img title="image" border="0" alt="image" src="http://khason.net/images/2008/12/image-a0fdc6d7-c89c-4ad2-bf3e-b909e181019d.png" width="600" height="480" /> </p>
<p>This genius game was developed by Vadim Gerasimov, Alexey Pajitnov and Dmitry Pavlovsky about 20 years ago and it still working on Windows PC (even in Vista). This how to <a href="http://khason.net/blog/software-is-sucks-probably-it-really-is/">build software</a>. As far as I know, today Vadim works in Google, Alexey in WildSnake and Vadim is commercial director somewhere in Russia.</p>
</p>
</p>
</p>
</p>
</p>
<p>So, <a href="http://vadim.oversigma.com/Tetris3.zip">download and play Tetris</a> now. Unfourchantely, 16 bit <a href="http://vadim.oversigma.com/Antix.zip">Antrix</a> requires full screen emulation, that is not supported on Vista.</p>


<p>Related posts:<ol><li><a href='http://khason.net/blog/windows-7-dry-run-or-how-things-should-be-done-to-correct-old-mistakes/' rel='bookmark' title='Permanent Link: Windows 7 &ndash; dry run or how things should be done to correct old mistakes'>Windows 7 &ndash; dry run or how things should be done to correct old mistakes</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://khason.net/blog/the-original-tetris-on-windows-vista/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>How to consume WCF or Webservice from Vista Sidebar gadget by using Silverlight?</title>
		<link>http://khason.net/blog/how-to-consume-wcf-or-webservice-from-vista-sidebar-gadget-by-using-silverlight/</link>
		<comments>http://khason.net/blog/how-to-consume-wcf-or-webservice-from-vista-sidebar-gadget-by-using-silverlight/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 21:37:10 +0000</pubDate>
		<dc:creator>Tamir</dc:creator>
				<category><![CDATA[BLOG]]></category>
		<category><![CDATA[.NET 3.5]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Windows Gadgets]]></category>

		<guid isPermaLink="false">http://khason.net/blog/how-to-consume-wcf-or-webservice-from-vista-sidebar-gadget-by-using-silverlight/</guid>
		<description><![CDATA[The challenge today is really simple. All we have to do is to write Silverlight&#160;Vista Sidebar Gadget, that consumes either WCF, ASMX or REST based service. Really simple, isn’t it? Let’s start
 
Build server side services
We should start from services. This is very straight forward mission. Here the logic I want to implement
public string Echo(string [...]


Related posts:<ol><li><a href='http://khason.net/tech/some-new-in-mix-downloads/' rel='bookmark' title='Permanent Link: Some new in-mix downloads'>Some new in-mix downloads</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>The challenge today is really simple. All we have to do is to write <a href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Silverlight/default.aspx">Silverlight</a>&#160;<a href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Windows+Gadgets/default.aspx">Vista Sidebar Gadget</a>, that consumes either <a href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WCF/default.aspx">WCF</a>, <a href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/ASP.NET/default.aspx">ASMX</a> or <a href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Web/default.aspx">REST</a> based service. Really simple, isn’t it? Let’s start</p>
<p><img title="image" border="0" alt="image" src="http://khason.net/images/2008/12/image-b882e2d3-27ca-43d7-8549-cf3f0e48d342.png" width="401" height="103" /> </p>
<h3>Build server side services</h3>
<p>We should start from services. This is very straight forward mission. Here the logic I want to implement</p>
<blockquote><p>public string Echo(string input)     <br />&#160;&#160;&#160; {      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return string.Format(&quot;ACK from {0}&quot;, input);      <br />&#160;&#160;&#160; }</p>
</blockquote>
<p>Well, WCF? We should mark service and operation contracts. That’s all</p>
<blockquote><p>[ServiceContract(Namespace = &quot;&quot;)]     <br />public class EchoService      <br />{      <br />&#160;&#160;&#160; [OperationContract]      <br />&#160;&#160;&#160; public string Echo(string input)      <br />&#160;&#160;&#160; {      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return string.Format(&quot;ACK from WCF with {0}&quot;, input);      <br />&#160;&#160;&#160; } </p>
<p> }</p>
</blockquote>
<p>This does not works. Why? Silverlight knows only consumes ASP.NET compatible (simplified) web services, thus we should add following attribute to the our class attributes collection</p>
<blockquote><p>[ServiceContract(Namespace = &quot;&quot;)]     <br />[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]      <br />public class EchoService      <br />{</p>
</blockquote>
<div>
</p>
</p>
</p>
<p>Now, the service is discoverable and accessible by Silverlight. Great news. Now let’s put it into our shared host. Hmm, we got strange error: “Deploying WCF Services: This collection already contains an address with scheme http.” What the hell is it?</p>
<p>This is shared hosting problem. Your host provider uses virtual IP and host addresses and has number of different web services, sitting on the same shared host. How to solve it? </p>
<p>Simple, all you have to do is to specify your own service host factory. Here the example of classes to put into code behind</p>
<blockquote><p>class SLHostFactory : ServiceHostFactory       <br />{        <br />&#160;&#160;&#160; protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)        <br />&#160;&#160;&#160; {        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; SLHost customServiceHost =        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; new SLHost(serviceType, new Uri(&quot;[Your URL goes here]&quot;,UriKind.Absolute));        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; return customServiceHost;        <br />&#160;&#160;&#160; }        <br />} </p>
<p>class SLHost : ServiceHost       <br />{        <br />&#160;&#160;&#160; public SLHost(Type serviceType, params Uri[] baseAddresses)        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; : base(serviceType, baseAddresses)        <br />&#160;&#160;&#160; { }        <br />&#160;&#160;&#160; protected override void ApplyConfiguration()        <br />&#160;&#160;&#160; {        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; base.ApplyConfiguration();        <br />&#160;&#160;&#160; }        <br />}</p>
</blockquote>
<p>And one attribute into your service tag</p>
<blockquote><p>Factory=&quot;SLHostFactory&quot; </p>
</blockquote>
<p>Now it works. So what’s next? Build ASMX web service. This is even simpler</p>
<blockquote><p>[WebMethod]       <br />public string Echo(string input)        <br />{        <br />&#160;&#160;&#160; return string.Format(&quot;ACK from web service with {0}&quot;, input);        <br />}</p>
</blockquote>
<p>We done, now either WCF and Web services are accessible from your Silverlight application. So, add Service reference and consume it</p>
<h3>Building client side</h3>
<p>Inside code behind of your Silverlight project, you should define two proxies – one for Web Service and another for WCF service. Bother services implements the same interface, so it should not be a problem</p>
<blockquote><p>ServerEcho.EchoServiceClient proxy;       <br />WebServiceEcho.EchoWebServiceSoapClient wsProxy;        <br />private void UserControl_Loaded(object sender, RoutedEventArgs e)        <br />{        <br />&#160;&#160;&#160; proxy = new ServerEcho.EchoServiceClient();        <br />&#160;&#160;&#160; proxy.EchoCompleted += new EventHandler&lt;ServerEcho.EchoCompletedEventArgs&gt;(proxy_EchoCompleted); </p>
<p>&#160;&#160;&#160; wsProxy = new SLGadget.WebServiceEcho.EchoWebServiceSoapClient();       <br />&#160;&#160;&#160; wsProxy.EchoCompleted += new EventHandler&lt;SLGadget.WebServiceEcho.EchoCompletedEventArgs&gt;(wsProxy_EchoCompleted);        <br />}</p>
</blockquote>
<p>Silverlight work only asynchronously, thus you should begin to understand, that synchronous programming is for pussies <img src='http://khason.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Consume it</p>
<blockquote><p>private void WCF_Click(object sender, RoutedEventArgs e)       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; proxy.EchoAsync(txt.Text);        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; } </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; private void WS_Click(object sender, RoutedEventArgs e)       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; wsProxy.EchoAsync(txt.Text);        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
</blockquote>
<p>And Update output</p>
<blockquote><p>void wsProxy_EchoCompleted(object sender, SLGadget.WebServiceEcho.EchoCompletedEventArgs e)       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; txt.Text = e.Error == null ? e.Result : (e.Error.InnerException != null ? e.Error.InnerException.ToString() : e.Error.Message);        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; } </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; void proxy_EchoCompleted(object sender, ServerEcho.EchoCompletedEventArgs e)       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; txt.Text = e.Error == null ? e.Result : (e.Error.InnerException != null ? e.Error.InnerException.ToString() : e.Error.Message);        <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
</blockquote>
<p>Now let’s run it. What? Another error? Security? Access denied? Of cause you have no crossdomain.xml. </p>
<blockquote><pre>&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;!DOCTYPE cross-domain-policy SYSTEM &quot;http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd&quot;&gt;
&lt;cross-domain-policy&gt;
   &lt;allow-access-from domain=&quot;*&quot; /&gt;
&lt;/cross-domain-policy&gt;</pre>
</blockquote>
<p>What? You have it and still getting the same error? Look into sniffer. You application is looking for other file, named clientaccesspolicy.xml. Why? According the documentation, you can use either… Hm, another bug with WCF consuming. Never mind, let’s put it too</p>
<blockquote>
<pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;access-policy&gt;
  &lt;cross-domain-access&gt;
    &lt;policy&gt;
      &lt;allow-from http-request-headers=&quot;*&quot;&gt;
        &lt;domain uri=&quot;*&quot;/&gt;
      &lt;/allow-from&gt;
      &lt;grant-to&gt;
        &lt;resource path=&quot;/&quot; include-subpaths=&quot;true&quot;/&gt;
      &lt;/grant-to&gt;</pre>
<pre>    &lt;/policy&gt;
  &lt;/cross-domain-access&gt;
&lt;/access-policy&gt;</pre>
</blockquote>
<p>Very well, now we are ready to run our application. It works! So, the only thing we should do is to pack it into MyGadget.gadget directory and put inside <em>%userprofile%\appdata\local\microsoft\windows sidebar\gadgets</em> together with gadget.xml manifest. </p>
<p>But… It stopped working… What’s the problem?</p>
<h3>Very client side networking in Silverlight</h3>
<p>The problem is, that SideBar executes it’s gadgets with local path, not with network path. Silverlight cannot use any network provider, when running locally. Why? Actually I do not know (maybe to prevent local applications development). so what to do?</p>
<p>Simple! Microsoft SideBar knows to run cross domain AJAX without any warnings and problems. So why not to use external XmlHttp from JavaScript for network access. Let’s do it</p>
<p>First we should initialize XMLHttpRequest object in JavaSctipt</p>
<blockquote>
<p>var xObj;<br />
      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; function getEchoWCF(text) {</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if(xObj == null) {&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; xObj = new XMLHttpRequest();</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; else if(xObj) {</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; xObj.abort();</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
</blockquote>
<p>Then create SOAP request to WCF or WebService</p>
<blockquote>
<p>var sURL = &quot;[Path yo your service]&quot;;<br />
      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //Build SOAP</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var sReq = &quot;&lt;s:Envelope xmlns:s=\&quot;http://schemas.xmlsoap.org/soap/envelope/\&quot;&gt;&lt;s:Body&gt;&lt;Echo&gt;&lt;input&gt;&quot;+text+&quot;&lt;/input&gt;&lt;/Echo&gt;&lt;/s:Body&gt;&lt;/s:Envelope&gt;&quot;;</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; xObj.open(&quot;POST&quot;, sURL, true);</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; xObj.setRequestHeader( &quot;Content-Type&quot;, &quot;text/xml; charset=utf-8&quot; );</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; xObj.setRequestHeader( &quot;Cache-Control&quot;, &quot;no-cache&quot; );</p>
<p>…</p>
<p>xObj.send(sReq);</p>
</blockquote>
<p>After the request created and send we should handle result. So we need an access from HTML page, hosting Silverlight object to Silverlight. Simple. “ScriptableMember &#8211; ScriptableType”, remember?</p>
<p>[ScriptableType]<br />
    <br />&#160;&#160;&#160; public partial class Page : UserControl</p>
<p>&#160;&#160;&#160; {</p>
<p>…</p>
<p></p>
<p>[ScriptableMember]<br />
    <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; public void UpdateResponse(string result)</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; {</p>
<p>Now return the result</p>
<blockquote>
<p>xObj.onreadystatechange = function() {<br />
      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (xObj.readyState === 4) {</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if (xObj.status &amp;&amp; xObj.status === 200) {&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; var control = document.getElementById(&quot;silverlightControl&quot;);</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; control.Content.Page.UpdateResponse(xObj.responseText);</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; } </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; } </p>
</blockquote>
<p>But this is not enough. We also should know to call Javascript from Silverlight… This is really simple</p>
<blockquote>
<p>private void JS_Click(object sender, RoutedEventArgs e)<br />
      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; {</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; HtmlPage.Window.Invoke(&quot;getEchoWCF&quot;, txt.Text);</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; }</p>
</blockquote>
<p>We done. Now you can pack your <a href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Silverlight/default.aspx">Silverlight control</a>, together with hosting HTML and Javascript into <a href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Windows+Gadgets/default.aspx">windows sidebar gadget</a> and use it even with external network support.</p>
<p>Have a good day and be nice people.</p>
</p>
</div>


<p>Related posts:<ol><li><a href='http://khason.net/tech/some-new-in-mix-downloads/' rel='bookmark' title='Permanent Link: Some new in-mix downloads'>Some new in-mix downloads</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://khason.net/blog/how-to-consume-wcf-or-webservice-from-vista-sidebar-gadget-by-using-silverlight/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Backup and restore your wireless networks settings by using WirelessMigrator</title>
		<link>http://khason.net/blog/backup-and-restore-your-wireless-networks-settings-by-using-wirelessmigrator/</link>
		<comments>http://khason.net/blog/backup-and-restore-your-wireless-networks-settings-by-using-wirelessmigrator/#comments</comments>
		<pubDate>Thu, 05 Jun 2008 22:58:00 +0000</pubDate>
		<dc:creator>Tamir</dc:creator>
				<category><![CDATA[BLOG]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[My tools]]></category>
		<category><![CDATA[promo]]></category>
		<category><![CDATA[soft]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[Vista Battery Saver]]></category>

		<guid isPermaLink="false">http://khason.net/blog/backup-and-restore-your-wireless-networks-settings-by-using-wirelessmigrator/</guid>
		<description><![CDATA[I had to reinstall my working notebook, so I begun to backup all it’s settings. I almost finished, when recognize, that Windows Vista has no tool for backup and restore wireless networks settings (tnx to Daniel Petri). You can manually add or remove it. You can even change the priorities, but you cannot backup or [...]


Related posts:<ol><li><a href='http://khason.net/tech/some-new-in-mix-downloads/' rel='bookmark' title='Permanent Link: Some new in-mix downloads'>Some new in-mix downloads</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I had to reinstall my working notebook, so I begun to backup all it’s settings. I almost finished, when recognize, that Windows Vista <strong>has no tool for backup and restore</strong> wireless networks settings (tnx to <a href="http://blogs.microsoft.co.il/blogs/danielp/">Daniel Petri</a>). You can manually add or remove it. You can even change the priorities, but you cannot backup or restore it.</p>
<p>&#160;<img title="image" border="0" alt="image" src="http://khason.net/images/2008/12/image-2b45e7bb-bce0-48bb-b16f-936ce90ce2b4.png" width="587" height="480" /> </p>
<p>What to do? How to save all my passwords for networks and all certificates. Digging a bit deeper I found a way to do it, by using command line prompt.</p>
<blockquote><p>“netsh wlan show profiles” will show you all wireless network profiles in your system     <br />”netsh wlan export profile name=”name” folder=”folder”” will export each profile to xml file (you can also run netsh wlan export profile” to export them all as bunch      <br />”netsh wlan add profile filename=”name”” will restore each one of profiles and returns them into the system</p>
</blockquote>
<p>For some reason, I cannot see my mother doing it… More then this, I cannot see myself remember all those command and doing it manually for each one of saved profiles (and I have a lot of them)</p>
<p>What’s the solution? Build handy tool! I’m developer after all and know to solve my and other’s problems by code.</p>
<h3>Let me introduce you WirelessMigrator</h3>
<p>What is <strong>WirelessMigrator</strong>? Wireless Migrator is a handy small program, that knows to backup and restore all wireless networks setting from your computer by one click. For some reason, there is no way to do it by using regular Windows Vista tools.     <br />This feature is extremely useful, when you have to reinstall your computer or use the same settings of wireless networks for different machines. In order to use the program, all you have to do is to run it once. The program generate small file, can be handled and transferred in diskette. Later if you&#8217;ll run this generated file, all settings of wireless networks will be restored on target machine. </p>
<p>Run “BackupWireless.exe” to backup</p>
<p><img title="image" border="0" alt="image" src="http://khason.net/images/2008/12/image-1e3f36bc-21b6-4960-ac19-0de212fcae83.png" width="580" height="72" /> </p>
<p>And “RestoreWireless.wnb” to restore</p>
<p><img title="image" border="0" alt="image" src="http://khason.net/images/2008/12/image-6452c424-427f-4f8e-9be9-542671f1142a.png" width="641" height="184" /> </p>
<p>That’s all, folks. Now you can save and restore your settings for wireless networks for migration easily. </p>
<p><a href="http://www.codeplex.com/wlan/Release/ProjectReleases.aspx">Download Wireless Migrator &gt;&gt;</a></p>
<p>At first run, the program will request elevation on Windows Vista, to assign backup archive extension with the program and be able to restore with one click. To completely remove all registry nodes, wrote by program, from the registry, use BackupWireless.exe /remove option. To reinstall the program, just run it for the first time. That’s what <a href="http://khason.net/blog/action-required-smart-client-users-group/">I’m calling SmartClient</a>. This is not “real” installation it also not very “web” application.</p>
<h3>WirelessMigrator has very advanced and smart user interface</h3>
<p>Now a little bit about the user interface of this program. I though a lot about it and decided not to make any user interface for it. Theoretically, it was possible to make kind of “Funky-Vista-Glow” list of all available networks and three buttons “Backup”, “Restore” and “Cancel”. I even done it with half an hour in <a href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF/default.aspx">WPF</a>. But wait a moment. Is it really necessary to have user interface for such program? It wont be more functional by having it. All it have to do, done automatically and you have nothing to do if something going wrong.</p>
<p>So, I build text-only progress bar and key switches to show progress (with will not take more, then 3 seconds), but that’s all. ‘m really interested to know what do you think about it?</p>
<p><a href="http://www.codeplex.com/wlan/Release/ProjectReleases.aspx"><strong>Download Wireless Migrator &gt;&gt;</strong></a></p>
<p>Your feedback is really important for me. Please take a moment and tell me what’s good and what’s bad with this program in order me to be able to continue it’s development. Full source of the program is <a href="http://www.codeplex.com/wlan/">available under MS-PL from CodePlex</a>.</p>
<p>My other open source projects, you may be interested with</p>
<ul>
<li><a href="http://www.codeplex.com/DupliFinder">Duplicate images finder</a></li>
<li><a href="http://www.codeplex.com/SharpControls">Silverlight controls library</a></li>
<li><a href="http://www.codeplex.com/vistabattery">Vista Battery Saver</a></li>
<li><a href="http://www.codeplex.com/wpfcap">WebCam control for WPF</a></li>
<li><a href="http://www.codeplex.com/wlan">Wireless Migrator</a></li>
</ul>
<p>Have a nice day and be good people.</p>


<p>Related posts:<ol><li><a href='http://khason.net/tech/some-new-in-mix-downloads/' rel='bookmark' title='Permanent Link: Some new in-mix downloads'>Some new in-mix downloads</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://khason.net/blog/backup-and-restore-your-wireless-networks-settings-by-using-wirelessmigrator/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>OpenUp Sidebar gadget</title>
		<link>http://khason.net/blog/openup-sidebar-gadget/</link>
		<comments>http://khason.net/blog/openup-sidebar-gadget/#comments</comments>
		<pubDate>Tue, 20 May 2008 20:52:26 +0000</pubDate>
		<dc:creator>Tamir</dc:creator>
				<category><![CDATA[BLOG]]></category>
		<category><![CDATA[promo]]></category>
		<category><![CDATA[soft]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[Windows Gadgets]]></category>
		<category><![CDATA[Windows Live]]></category>

		<guid isPermaLink="false">http://khason.net/blog/openup-sidebar-gadget/</guid>
		<description><![CDATA[OpenUp competition is on the air? Authors of contributed projects are stressed and want to know what’s going on with their pet project on CodePlex.
What can they do about stress? To get it under control and download new gadget, I built to help them to relieve stress. Just look on your side bar and see [...]


Related posts:<ol><li><a href='http://khason.net/blog/how-to-pass-technical-interview-in-better-place/' rel='bookmark' title='Permanent Link: How to pass technical interview in Better Place'>How to pass technical interview in Better Place</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.microsoft.com/israel/openup/index.htm" target="_blank">OpenUp</a> competition is on the air? Authors of <a href="http://khason.net/blog/openup-and-my-open-source-submissions/" target="_blank">contributed projects</a> are stressed and want to know what’s going on with their pet project on <a href="http://www.codeplex.com/" target="_blank">CodePlex</a>.</p>
<p>What can they do about stress? To get it under control and <a href="http://blogs.microsoft.co.il/files/folders/90825/download.aspx" target="_blank">download new gadget</a>, I built to help them to relieve stress. Just look on your side bar and see three top rated projects (by CodePlex)</p>
<p><img title="image" border="0" alt="image" src="http://khason.net/images/2008/12/image-333b0dfb-3a5e-4db2-afad-dec545b454d9.png" width="389" height="113" /> </p>
<p>Click on it or drag it out of SideBar to see all submitted projects and it’s rating</p>
<p><img title="image" border="0" alt="image" src="http://khason.net/images/2008/12/image-0e487295-3ec4-4512-bf70-00001ea1f96e.png" width="435" height="356" /> </p>
<p>Take it easy and return to work. You should continue development of your projects.</p>
<p><a href="http://blogs.microsoft.co.il/files/folders/90825/download.aspx" target="_blank">Download OpenUp gadget &gt;&gt;</a></p>
<p><strong>Note</strong>: this is very first version with number of bugs. Those days I have no time to fix them, so you can either use it “as-is” or fix bugs and resubmit.</p>


<p>Related posts:<ol><li><a href='http://khason.net/blog/how-to-pass-technical-interview-in-better-place/' rel='bookmark' title='Permanent Link: How to pass technical interview in Better Place'>How to pass technical interview in Better Place</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://khason.net/blog/openup-sidebar-gadget/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>What’s new in MSDN Downloads?</title>
		<link>http://khason.net/blog/what%e2%80%99s-new-in-msdn-downloads/</link>
		<comments>http://khason.net/blog/what%e2%80%99s-new-in-msdn-downloads/#comments</comments>
		<pubDate>Tue, 20 May 2008 14:02:41 +0000</pubDate>
		<dc:creator>Tamir</dc:creator>
				<category><![CDATA[BLOG]]></category>
		<category><![CDATA[.NET 3.5]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[My tools]]></category>
		<category><![CDATA[promo]]></category>
		<category><![CDATA[soft]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[VSTS]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://khason.net/blog/what%e2%80%99s-new-in-msdn-downloads/</guid>
		<description><![CDATA[Just look how many new releases those days in MSDN Download web site.

Virtual PC 2007 SP1 – download and release notes
Scriptomatic 2.0 &#8211; download (uses PowerShell 1.0)
Windows PowerShell V2 CTP2 &#8211; download
Office Live Update 1.1 &#8211; download
.NET Framework 3.5 SP1 beta – download
Visual Studio 2008 SP1 beta &#8211; download
Microsoft Expression Blend 2.5 March 2008 Preview [...]


Related posts:<ol><li><a href='http://khason.net/tech/some-new-in-mix-downloads/' rel='bookmark' title='Permanent Link: Some new in-mix downloads'>Some new in-mix downloads</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Just look how many new releases those days in MSDN Download web site.</p>
<ul>
<li>Virtual PC 2007 SP1 – <a href="http://www.microsoft.com/downloads/details.aspx?familyid=28c97d22-6eb8-4a09-a7f7-f6c7a1f000b5&amp;displaylang=en&amp;tm" target="_blank">download</a> and <a href="http://www.microsoft.com/downloads/details.aspx?familyid=9f3d3eb5-5e03-4712-999c-e96f91bdf128&amp;displaylang=en&amp;tm" target="_blank">release notes</a></li>
<li>Scriptomatic 2.0 &#8211; <a href="http://www.microsoft.com/downloads/details.aspx?familyid=d87daf50-e487-4b0b-995c-f36a2855016e&amp;displaylang=en&amp;tm" target="_blank">download</a> (uses PowerShell 1.0)</li>
<li>Windows PowerShell V2 CTP2 &#8211; <a href="http://www.microsoft.com/downloads/details.aspx?familyid=7c8051c2-9bfc-4c81-859d-0864979fa403&amp;displaylang=en&amp;tm" target="_blank">download</a></li>
<li>Office Live Update 1.1 &#8211; <a href="http://www.microsoft.com/downloads/details.aspx?familyid=98df1962-f351-4bd2-9ed2-eaafed67996d&amp;displaylang=en&amp;tm" target="_blank">download</a></li>
<li>.NET Framework 3.5 SP1 beta – <a href="http://www.microsoft.com/downloads/details.aspx?familyid=23516c63-2db2-4e7f-aaba-32b12d6e025c&amp;displaylang=en&amp;tm" target="_blank">download</a></li>
<li>Visual Studio 2008 SP1 beta &#8211; <a href="http://www.microsoft.com/downloads/details.aspx?familyid=cf99c752-1391-4bc3-babc-86bc0b9e8e5a&amp;displaylang=en&amp;tm" target="_blank">download</a></li>
<li>Microsoft Expression Blend 2.5 March 2008 Preview &#8211; <a href="http://www.microsoft.com/downloads/details.aspx?familyid=32a3e916-e681-4955-bc9f-cfba49273c7c&amp;displaylang=en&amp;tm" target="_blank">download</a></li>
<li>Microsoft Office for MAC SP1 – <a href="http://www.microsoft.com/downloads/details.aspx?familyid=395d1487-a3a6-4106-a0f8-4d6e1d6d89d2&amp;displaylang=en&amp;tm" target="_blank">download</a></li>
<li>Windows XP SP3 – download as <a href="http://www.microsoft.com/downloads/details.aspx?familyid=2FCDE6CE-B5FB-4488-8C50-FE22559D164E&amp;displaylang=en" target="_blank">ISO</a> or as <a href="http://www.microsoft.com/downloads/details.aspx?familyid=5B33B5A8-5E76-401F-BE08-1E1555D4F3D4&amp;displaylang=en" target="_blank">NEP</a> + <a href="http://www.microsoft.com/downloads/details.aspx?familyid=60807C3A-8969-4DDF-BEB2-8BFAC9ED416B&amp;displaylang=en" target="_blank">release notes</a></li>
<li>Symbols package for Microsoft XP Service Pack 3 – <a href="http://www.microsoft.com/downloads/details.aspx?familyid=e0991ed0-eae0-4730-89a9-3a3b383fb3e1&amp;displaylang=en&amp;tm" target="_blank">download</a></li>
<li>Outlook 2007/2003/2002 Add-in for Personal Folder Backup – <a href="http://www.microsoft.com/downloads/details.aspx?familyid=8b081f3a-b7d0-4b16-b8af-5a6322f4fd01&amp;displaylang=en&amp;tm" target="_blank">download</a></li>
<li>XNA Game Studio 3.0 CTP – <a href="http://www.microsoft.com/downloads/details.aspx?familyid=df4af56a-58a7-474c-bfd0-7cf8ed3036a3&amp;displaylang=en&amp;tm" target="_blank">download</a></li>
</ul>
<p>Too much – too cool. Turn your download managers on</p>
<p><img title="image" border="0" alt="image" src="http://khason.net/images/2008/12/image-af0d591e-8091-4528-97ee-114ffe41a816.png" width="332" height="232" /> </p>
<p>Have a nice day</p>


<p>Related posts:<ol><li><a href='http://khason.net/tech/some-new-in-mix-downloads/' rel='bookmark' title='Permanent Link: Some new in-mix downloads'>Some new in-mix downloads</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://khason.net/blog/what%e2%80%99s-new-in-msdn-downloads/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
