<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4683733850712825549</id><updated>2011-04-21T14:11:02.530-07:00</updated><title type='text'>Adventures in WPF</title><subtitle type='html'>&lt;i&gt;Tales from beneath the WPF learning curve&lt;/i&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://adventuresinwpf.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4683733850712825549/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://adventuresinwpf.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>chrisd</name><uri>http://www.blogger.com/profile/10494573891618930891</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4683733850712825549.post-7390663391285222396</id><published>2009-05-25T05:29:00.000-07:00</published><updated>2009-05-25T05:43:59.772-07:00</updated><title type='text'>Windows API Code Pack for .NET</title><content type='html'>Hold the phone&amp;mdash;MS has released the &lt;a href="http://windowsteamblog.com/blogs/developers/archive/2009/05/18/windows-7-managed-code-apis.aspx"&gt;Windows API Code Pack for Microsoft .NET Framework&lt;/a&gt;, a source code library for accessing a bunch of Windows features that aren't directly supported by .NET. It concentrates on new Windows 7 features, but there's support for some Vista APIs as well&amp;mdash;including task dialogs.&lt;br /&gt;&lt;br /&gt;Some of the supported APIs:&lt;ul&gt;&lt;li&gt;Win7 libraries&lt;li&gt;Known folders&lt;li&gt;Task dialogs&lt;li&gt;Vista and Win7 common dialogs&lt;li&gt;Win7 taskbar jump lists, icon overlays, and progress bars&lt;/ul&gt;I haven't done any work with this yet, but it certainly looks promising. The code pack home page is in the &lt;a href="http://code.msdn.microsoft.com/WindowsAPICodePack"&gt;MSDN Code Gallery&lt;/a&gt;, and the download page is &lt;a href="http://code.msdn.microsoft.com/WindowsAPICodePack/Release/ProjectReleases.aspx?ReleaseId=2636"&gt;here&lt;/a&gt;. Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4683733850712825549-7390663391285222396?l=adventuresinwpf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adventuresinwpf.blogspot.com/feeds/7390663391285222396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4683733850712825549&amp;postID=7390663391285222396' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4683733850712825549/posts/default/7390663391285222396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4683733850712825549/posts/default/7390663391285222396'/><link rel='alternate' type='text/html' href='http://adventuresinwpf.blogspot.com/2009/05/windows-api-code-pack-for-net.html' title='Windows API Code Pack for .NET'/><author><name>chrisd</name><uri>http://www.blogger.com/profile/10494573891618930891</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4683733850712825549.post-3314041692774779989</id><published>2008-09-18T03:06:00.000-07:00</published><updated>2009-04-15T05:57:04.182-07:00</updated><title type='text'>VistaBridge Considered Harmful; An Alternative</title><content type='html'>I've &lt;a href="http://adventuresinwpf.blogspot.com/2008/09/first-thing-you-need-to-do-is-create.html"&gt;been playing with VistaBridge&lt;/a&gt; for a little while now, and the more I work with it, the more I realize that it's not ready for prime time. If you really look at the source, you'll see that it's filled with to-do's and comments along the lines of "This doesn't work". It tries to detect the presence of the correct version of comctl32.dll using an absolute path. The Visual Studio designer doesn't like some of its components: it won't display a window that uses task dialog progress bars and of the other VistaBridge controls.&lt;br /&gt;&lt;br /&gt;Of course, VistaBridge is sample code; it was never intended to be used as-is in production code. Nevertheless, from web chatter it would appear that many developers have tried to use it. Developers should understand that it is unfinished--and apparently abandoned--code, so use it as inspiration only. &lt;em&gt;[&lt;strong&gt;Update: not abandoned! See Kate Gregory's comment.]&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;The other problem with VistaBridge is that it just doesn't work very well.&lt;br /&gt;&lt;br /&gt;There are a number of issues, but the biggest problem has been the dreaded "entry point not found" error when trying to call &lt;a href="http://msdn.microsoft.com/en-us/library/bb760540%28VS.85%29.aspx"&gt;TaskDialog&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/bb760544%28VS.85%29.aspx"&gt;TaskDialogIndirect&lt;/a&gt;, and the other Vista-only APIs. It was well understood that this probem had to do with side by side assemblies: these functions are present only in comctl32.dll version 6, but, for compatibility reasons, Vista will load an earlier version unless you tell it otherwise. The approach most people (&lt;a href="http://adventuresinwpf.blogspot.com/2008/09/first-thing-you-need-to-do-is-create.html"&gt;including me&lt;/a&gt;) have been taking is to use a manifest. This has proven to be tricky, and may not be the right solution anyway, especially if what you're writing is a library: you don't necessarily want to force the entire application to use common controls 6.&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-style: italic;"&gt;right&lt;/span&gt; solution is to push a new &lt;a href="http://msdn.microsoft.com/en-us/library/aa374153%28VS.85%29.aspx"&gt;activation context&lt;/a&gt; when calling one of the Vista-only APIs. The activation context will use the correct version of comctl32.dll while leaving the rest of the application alone, and no manifest is required.&lt;br /&gt;&lt;br /&gt;Fortunately, this is easy to do. Some very helpful people at Microsoft (thanks, Scott, Rob, and Anson) pointed me to some complete code that already exists in the &lt;a href="http://support.microsoft.com/kb/830033"&gt;MS Knowledgebase&lt;/a&gt;. The code from the article (KB 830033) does the trick &lt;span style="font-style: italic;"&gt;as is&lt;/span&gt;. Even though the article is talking about a different issue (applying theming to Office add-ins), it does exactly what we want, and you can plop it into your application or library exactly as shown.&lt;br /&gt;&lt;br /&gt;I've put together a C# class library that supports task dialogs using this technique and posted the Visual Studio 2008 solution &lt;a href="http://www.covesoftware.com/wpf/VistaLib.zip"&gt;here&lt;/a&gt;.  The solution includes a simple demo app that displays a number of different styles of task dialogs, most of which are defined in XAML window resources.  The library has not been through much testing, so use it to learn the techniques only.  It's not intended for use in production code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4683733850712825549-3314041692774779989?l=adventuresinwpf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adventuresinwpf.blogspot.com/feeds/3314041692774779989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4683733850712825549&amp;postID=3314041692774779989' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4683733850712825549/posts/default/3314041692774779989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4683733850712825549/posts/default/3314041692774779989'/><link rel='alternate' type='text/html' href='http://adventuresinwpf.blogspot.com/2008/09/vistabridge-considered-harmful.html' title='VistaBridge Considered Harmful; An Alternative'/><author><name>chrisd</name><uri>http://www.blogger.com/profile/10494573891618930891</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4683733850712825549.post-8162830515982617669</id><published>2008-09-16T04:38:00.000-07:00</published><updated>2008-09-18T04:58:12.849-07:00</updated><title type='text'>Which Version of a DLL Is Loaded?</title><content type='html'>While playing with VistaBridge (about which, more soon), I needed to verify that my .NET application was using version 6 of comctl32.dll, which is the first version that supports task dialogs. I found a number of posts about getting version information for unmanaged DLLs, but they all involved getting file version information from the physical file on disk. This isn't a good solution due to &lt;a href="http://msdn.microsoft.com/en-us/library/aa376307.aspx"&gt;side-by-side&lt;/a&gt; considerations: Windows might not be using the version of comctl32.dll that lives in the system folder.&lt;br /&gt;&lt;br /&gt;I got the answer from the brand new (and very promising) &lt;a href="http://stackoverflow.com/"&gt;Stack Overflow&lt;/a&gt; programming Q&amp;amp;A site: &lt;a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.process.getcurrentprocess.aspx"&gt;System.Diagnostics.Process.GetCurrentProcess&lt;/a&gt; returns a &lt;a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx"&gt;Process&lt;/a&gt; object, which has a &lt;a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.process.modules.aspx"&gt;Modules&lt;/a&gt; collection. You can iterate the collection, find the module you're looking for, and check its &lt;a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.fileversioninfo.aspx"&gt;FileVersionInfo&lt;/a&gt; property. This will work, of course, for any module, not just comctl32.&lt;br /&gt;&lt;br /&gt;Here's a function that returns the FileVersionInfo for any loaded module:&lt;div style="font-size: 9pt; color: Navy; margin-left: 0.15in;"&gt;&lt;pre&gt;using System.Diagnostics;&lt;br /&gt;internal static FileVersionInfo GetLoadedModuleVersion(string name)&lt;br /&gt;{&lt;br /&gt;Process process = Process.GetCurrentProcess();&lt;br /&gt;foreach (ProcessModule module in process.Modules)&lt;br /&gt;{&lt;br /&gt;   if (module.ModuleName.ToLower() == name)&lt;br /&gt;       return module.FileVersionInfo;&lt;br /&gt;}&lt;br /&gt;return null;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;So if I want to verify that I have comctl version 6:&lt;div style="font-size: 9pt; color: Navy; margin-left: 0.15in;"&gt;&lt;pre&gt;internal static bool HaveComctl6()&lt;br /&gt;{&lt;br /&gt;FileVersionInfo verInfo = GetLoadedModuleVersion("comctl32.dll");&lt;br /&gt;return verInfo != null &amp;amp;&amp;amp; verInfo.FileMajorPart &gt;= 6;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4683733850712825549-8162830515982617669?l=adventuresinwpf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adventuresinwpf.blogspot.com/feeds/8162830515982617669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4683733850712825549&amp;postID=8162830515982617669' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4683733850712825549/posts/default/8162830515982617669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4683733850712825549/posts/default/8162830515982617669'/><link rel='alternate' type='text/html' href='http://adventuresinwpf.blogspot.com/2008/09/which-version-of-dll-is-loaded.html' title='Which Version of a DLL Is Loaded?'/><author><name>chrisd</name><uri>http://www.blogger.com/profile/10494573891618930891</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4683733850712825549.post-3835010230357531548</id><published>2008-09-11T21:15:00.000-07:00</published><updated>2008-09-18T04:59:36.460-07:00</updated><title type='text'>VistaBridge, Task Dialogs, and WPF</title><content type='html'>&lt;div style="margin-left: 0.5in; color: red;"&gt;&lt;i&gt;Update: problem solved. See &lt;a href="http://adventuresinwpf.blogspot.com/2008/09/vistabridge-considered-harmful.html"&gt;here&lt;/a&gt;.&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://weblogs.asp.net/kennykerr/archive/2006/07/18/Windows-Vista-for-Developers-_1320_-Part-2-_1320_-Task-Dialogs-in-Depth.aspx"&gt;Task dialogs&lt;/a&gt; and the other new Vista UI features are pretty nice, aren't they?  Sure they are, unless you're using WPF, in which case you've probably been frustrated by the lack of a WPF-able managed wrapper. There was speculation that .NET 3.5 would include one, but, alas, it didn't.  We'll see what happens at &lt;a href="http://www.microsoftpdc.com/"&gt;PDC 2008&lt;/a&gt; next month.&lt;br /&gt;&lt;br /&gt;There are quite a few .NET wrappers scattered about, but both WPF and .NET developers seem to have been plagued by "entry point not found" problems when the application tries to find the &lt;a href="http://msdn.microsoft.com/en-us/library/bb760540%28VS.85%29.aspx"&gt;TaskDialog&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/bb760544%28VS.85%29.aspx"&gt;TaskDialogIndirect&lt;/a&gt; functions in comctl32.dll at runtime.&lt;br /&gt;&lt;br /&gt;The VistaBridge SDK sample was the one library that promised to be WPF-friendly, but many developers appear to have been having the same problem with entry points using VistaBridge.&lt;br /&gt;&lt;br /&gt;Everyone understands, I think, the basic problem: task dialogs require version 6.0 of the common control library, but applications load earlier versions by default (for compatibility reasons, I suppose). Manifests are the answer, but even with a proper manifest the problem persists.&lt;br /&gt;&lt;br /&gt;After a good deal of hair-pulling, I finally have VistaBridge working in an application, and I thought I'd pass along what I found. (The following assumes that you've been able to build VistaBridge.dll itself, which is the VistaBridgeLibrary project of the VistaBridge solution.)&lt;br /&gt;&lt;br /&gt;First, you need to create a manifest that specifies version 6.0 of the common control library. Here's one (fix the name and description!):&lt;div style="font-size: 9pt; color: Navy; margin-left: 0.15in;"&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&amp;gt;&lt;br /&gt;&amp;lt;assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"&amp;gt;&lt;br /&gt;&amp;lt;assemblyIdentity version="1.0.0.0" processorArchitecture="msil"&lt;br /&gt;name="bitsy.exe" type="win32" /&amp;gt;&lt;br /&gt;&amp;lt;description&amp;gt;Description of Application&amp;lt;/description&amp;gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;lt;dependentAssembly&amp;gt;&lt;br /&gt; &amp;lt;assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0"&lt;br /&gt;  processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /&amp;gt;&lt;br /&gt;&amp;lt;/dependentAssembly&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;lt;/assembly&amp;gt;&lt;/pre&gt;&lt;/div&gt;Call this "&lt;i&gt;MyApp&lt;/i&gt;.exe.manifest" (using your app name, of course) and put it in the base folder of your project.  Now follow these steps:&lt;ol&gt;&lt;br /&gt;&lt;li&gt;If your solution is open in VisualStudio, close it.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If you've previously built your project, delete the &lt;i&gt;bin&lt;/i&gt; and &lt;span style="font-style: italic;"&gt;obj&lt;/span&gt; folders, which you'll find immediately under your project folder. &lt;span style="font-style: italic;"&gt;I've found that this step is critical--it won't work if you don't do this, even if you do a full rebuild.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Copy VistaBridge.dll to your project folder.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Open the project in VS.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add the manifest file to your project.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In the &lt;span style="font-weight: bold;"&gt;Application&lt;/span&gt; tab of your project properties, select your manifest from the &lt;span style="font-weight: bold;"&gt;Manifest&lt;/span&gt; dropdown.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Set the &lt;span style="font-weight: bold;"&gt;Copy to Output Directory&lt;/span&gt; property of the manifest file to "Copy always".&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add a reference to VistaBridge.dll (right-click &lt;span style="font-weight: bold;"&gt;References&lt;/span&gt;, choose &lt;span style="font-weight: bold;"&gt;Add Reference&lt;/span&gt;, open the &lt;span style="font-weight: bold;"&gt;Browse&lt;/span&gt; tab).&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;At this point you should be able to use the library. There are examples of how to do this in the VistaBridgeDemoApp project. (The task dialog definitions are in the window resources in Window1.xaml.)&lt;br /&gt;&lt;br /&gt;For completeness, I should add that there is one issue: the designer seems to have significant problems with some of the classes, including &lt;i&gt;TaskDialogProgressBar&lt;/i&gt; and others.  If you use these, the designer won't load the window, but it will still compile OK. That's been my experience, anyway.  Maybe someone more experienced can take the next step and find out why this isn't working.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4683733850712825549-3835010230357531548?l=adventuresinwpf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adventuresinwpf.blogspot.com/feeds/3835010230357531548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4683733850712825549&amp;postID=3835010230357531548' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4683733850712825549/posts/default/3835010230357531548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4683733850712825549/posts/default/3835010230357531548'/><link rel='alternate' type='text/html' href='http://adventuresinwpf.blogspot.com/2008/09/first-thing-you-need-to-do-is-create.html' title='VistaBridge, Task Dialogs, and WPF'/><author><name>chrisd</name><uri>http://www.blogger.com/profile/10494573891618930891</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4683733850712825549.post-102364766789101144</id><published>2008-09-08T10:16:00.000-07:00</published><updated>2008-09-10T06:40:42.409-07:00</updated><title type='text'>Where's My Command Line?</title><content type='html'>When I first looked for the command line in a WPF application, I couldn't find it anywhere. A web search found considerable discussion of this; some of the techniques worked, some didn't, and some were much more complicated than necessary.  It's really not that hard.&lt;br /&gt;&lt;br /&gt;To start with, we need someplace to put the command line parameters. I use a global static List&amp;lt;string&amp;gt; for this. I know, &lt;span style="font-style: italic;"&gt;globals are bad&lt;/span&gt;, and that's true--but in my view, it is perfectly OK to use a very small number of global variables for things that you &lt;i&gt;know&lt;/i&gt; you'll only need one of in an application. If you don't want to do this, that's fine. Use a field/property in your main window or add it to your Application class.  But here's what I have in Globals.cs:&lt;div style="font-size: 9pt; color: Navy; margin-left: 0.15in;"&gt;&lt;pre&gt;namespace MyApplication&lt;br /&gt;{&lt;br /&gt;    public static class Globals&lt;br /&gt;    {&lt;br /&gt;        public static List&amp;lt;string&amp;gt; Args;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;Now I can reference my arguments via &lt;i&gt;Globals.Args&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Filling the list is simple. All you have to do is override &lt;i&gt;Application.OnStartup&lt;/i&gt; in App.xaml.cs and look at the &lt;i&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.startupeventargs.aspx"&gt;System.Windows.StartupEventArgs&lt;/a&gt;&lt;/i&gt; parameter. &lt;i&gt;StartupEventArgs&lt;/i&gt; contains an &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.startupeventargs.args.aspx"&gt;&lt;i&gt;Args&lt;/i&gt;&lt;/a&gt; member, which is an array of strings containing your command line parameters.  Like this:&lt;div style="font-size: 9pt; color: Navy; margin-left:0.15in"&gt;&lt;pre&gt;namespace MyApplication&lt;br /&gt;{&lt;br /&gt;    public partial class App : Application&lt;br /&gt;    {&lt;br /&gt;        ...&lt;br /&gt;        protected override void OnStartup(StartupEventArgs e)&lt;br /&gt;        {&lt;br /&gt;          base.OnStartup(e);&lt;br /&gt;          Globals.Args = new List&lt;string&gt;();&lt;br /&gt;          for (int ix = 0; ix &amp;lt; e.Args.GetLength(0); ++ix)&lt;br /&gt;              Globals.Args.Add(e.Args[ix]);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;Now you have a nice list of parameters.  The number of parameters is &lt;i&gt;Globals.Args.Count&lt;/i&gt;, and the first argument is &lt;i&gt;Globals.Args[0]&lt;/i&gt;. What could be easier?&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4683733850712825549-102364766789101144?l=adventuresinwpf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adventuresinwpf.blogspot.com/feeds/102364766789101144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4683733850712825549&amp;postID=102364766789101144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4683733850712825549/posts/default/102364766789101144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4683733850712825549/posts/default/102364766789101144'/><link rel='alternate' type='text/html' href='http://adventuresinwpf.blogspot.com/2008/09/wheres-my-command-line.html' title='Where&apos;s My Command Line?'/><author><name>chrisd</name><uri>http://www.blogger.com/profile/10494573891618930891</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4683733850712825549.post-5790440840788151552</id><published>2008-09-03T15:57:00.000-07:00</published><updated>2008-09-17T07:40:45.581-07:00</updated><title type='text'>What's All This?</title><content type='html'>Call me crazy.&lt;br /&gt;&lt;br /&gt;I've spent the last month or so learning C#, .Net, and WPF all pretty much simultaneously.  Now, I'm a very experienced C++ programmer, but this has been a lot to absorb in not much time.&lt;br /&gt;&lt;br /&gt;Most of what I've needed has been pretty well covered in one or the other of the six tons of books that are now bending my shelves, but there have been things that I really had to dig for.&lt;br /&gt;&lt;br /&gt;My aim here is to cover some of these so that maybe it will be easier for you young'uns.&lt;br /&gt;&lt;br /&gt;And if you not-so-young'uns find something really stupid, add a comment. Like I said, this is all new to me.&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4683733850712825549-5790440840788151552?l=adventuresinwpf.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adventuresinwpf.blogspot.com/feeds/5790440840788151552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4683733850712825549&amp;postID=5790440840788151552' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4683733850712825549/posts/default/5790440840788151552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4683733850712825549/posts/default/5790440840788151552'/><link rel='alternate' type='text/html' href='http://adventuresinwpf.blogspot.com/2008/09/whats-all-this.html' title='What&apos;s All This?'/><author><name>chrisd</name><uri>http://www.blogger.com/profile/10494573891618930891</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
