November 2010 (1)
August 2010 (1)
July 2010 (1)
June 2010 (3)
July 2009 (3)
June 2009 (1)
May 2009 (1)
February 2009 (1)
January 2009 (1)
November 2008 (3)
October 2008 (4)
September 2008 (9)
August 2008 (6)
July 2008 (3)
June 2008 (3)
January 2008 (1)
November 2007 (2)
October 2007 (6)
September 2007 (5)
August 2007 (22)
July 2007 (6)
June 2007 (1)
May 2007 (3)
April 2007 (27)
March 2007 (8)
February 2007 (6)
September 2006 (2)
August 2006 (4)
July 2006 (9)
June 2006 (17)
May 2006 (20)
April 2006 (12)
March 2006 (9)
February 2006 (4)
January 2006 (3)
December 2005 (2)
November 2005 (4)
October 2005 (5)
September 2005 (37)
August 2005 (83)
July 2005 (6)

Active Directory / LDAP (0)
ASP.Net (19)
Blackberry Development (4)
c# (34)
c++ (3)
Code Camp (1)
Excel (1)
Exchange (3)
Front Page 2003 (6)
FTP User Editor (4)
IIS (146)
IIS - Log Parser (7)
IIS / FTP (12)
IIS / Tools / Administration (42)
IIS / Tools / Authentication (6)
IIS / Tools / Compression (8)
IIS / Tools / Crash & Hang (12)
IIS / Tools / ISAPI Filters (17)
IIS / Tools / Log Files (17)
IIS / Tools / Scripts (28)
IIS / Tools / Security (9)
IIS / Tools / SSL (6)
IIS 7 (3)
Internet Information Server (1)
Me (Chris Crowe) (6)
MIME Types (1)
Misc (72)
Oulook Express (2)
Silverlight (1)
SQL Server (27)
SQL Server CTE (1)
Vista (15)
Vista Gadgets (8)
Visual Studio (11)
Voice over BroadBand (1)
Windows (33)
Windows Powershell (3)
Windows Sharepoint Services (0)
Windows Sharepoint Services (15)
Windows Vista (14)
Wine Cellar (1)
WMI (8)
Vista Gadgets (8)

Vista Gadgets

Code Camp in Christchurch, New Zealand in November 2007

I see that there is now offical talk of a Code Camp in Christchurch, New Zealand in November 2007 which is good to see. I hope for some confirmed dates soon.

This is great news as the Mainland as we call it (the South Island of New Zealand) has never had a Code Camp before.

For pre-registrations and more details see 

The theme of the code camp is Next generation, back to basics. 

New releases of C#, VB, .Net, ASP and SQL are iminent.  This code camp will focus on getting up to speed with all of this, plus cover migration stratigies and many non-technology specific topics such as Architecture and Development Life Cycle.  Hopefully something for everyone - noobs, gurus, youg and old.

I have been asked to speak on IIS 7 and will be providing a session on this somewhere over the two day event.

I also spoke to Daniel Wissa ( at TechEd 2007) who runs the Christchurch .NET user group with Peter Jones [MVP] about running a shared session some time this year on Windows Vista Gadget Development. The code camp may be a good time for this session as well.

 I am trying to get some sponser support as well - but I will keep it quiet until I know the result.

Windows Vista Clock with smooth scrolling seconds

I saw a post on the  MSDN Forums for  Sidebar Gadget Development forum.

The post is available at this url:

The user asked this question:

"Looking at the standard Microsoft Clock Sidebar Gadget, I was wondering whether it would be possible to change the jumping second-hand into a sweep second-hand, i.e. one that moves smoothly like an old mechanical clock or mechanical wrist watch. I looked into the code but had to give up after about two hours of trying. Anyone knoews hoe to do that? Thanks! "

You can download my re-write of the default Clock to support smooth scrolling seconds.

Download Now

Vista Sidebar Gadget - Calling a function in the flyout from the main gadget page

I have been trying to get my main gadget Javascript page to be able to call a function in the flyout page.

Note: You will want to put a try/catch around the code in case the flyout is actually not available since it was closed and would cause an exception

On the main gadget Javascript page I have a function which will call the function resetMarginLeft() in the flyout

function renderFlyout()
   // Other Stuff

So that function above will call a method called resetMarginLeft() which belongs to the document object model (DOM) in the flyout.  

Now the document object model (DOM) does not have such as method so we create it in the onLoad event in the javascript function. To trigger this onload we add the following code to the flyout.html page

<body onload="onLoad()"

In the flyout Javascript page I have this code

function onLoad()
    document.resetMarginLeft = resetMarginLeft;

This bit of code looks odd but basically we are creating a method reference in the document object model (DOM). This method can then be called from our main Gadget page.

Basically we are saying

document.MyFunctionNameForTheDOM = SomeOtherFunctionOnThisPage;

Note: Do not include () in the function reference above!

Here is the source to the actual resetMarginLeft() function - but it could do anything you wanted, in my case I just wanted to reset a few variables.

function resetMarginLeft()
  marginLeft = 0;
  increment = 1;

Reproducable bugs in Windows Vista Sidebar RTM

I came across a forum that has a special topic on reproducable bugs in the Windows Vista Sidebar.

Most of the bugs have a work around so well worth a look if you are experiencing some strange issues with Vista Gadget development.

Here is a current list of bugs

Bug# 1: The bottom and right are incorrectly cropped when rotation is applied to <g:background>
Bug# 2: <g:background> and addImageObject incorrectly place the image, by (originalImageWidth-scaledImageWidth)/2, (originalImageHeight-scaledImageHeight)/2
Bug# 3: Image exploded beyond belief. Sidebar cannot resize an image smaller than 50% of it's original size
Bug# 4: Gadgets will not install if they contain blank directories in the Gadget package.
Bug# 5: Changing <g:text>.value doesn't update <g:text>.width or <g:text>.height - the text is stretched, or you get an invalid result when trying to reference it.
Bug# 6: Settings page is limited to 300x400. The Settings page on this gadget should be 1000x1000
Bug# 7: Sidebar crashes when trying to use addImageObject or addTextObject in the BODY section.
Bug# 8: Aliased surround is incorrectly placed if image is rotated and body margin is not 0.
Bug# 9: The three (or two if you have no settings) icons that appear when you hover over a Gadget are incorrectly placed for detached Gadgets after Sidebar is reloaded. They're shifted left 6 pixels.
Bug# 10: If you manually Exit Sidebar, the X position of all detached Gadgets is decreased by 6.
Bug# 11: System.* namespace goes missing after "window.location.reload(true);"
Bug# 12: Focus is lost on the Flyout if you change System.Gadget.Flyout.file whilst a Flyout is open
Bug# 13: Setting "System.Gadget.Flyout.onShow = null;" generates an error. This goes for all other Gadget settings that are set to a function.
Bug# 14: Partially transparent surround is scaled incorrectly when setting System.Gadget.background, if the image is larger than the Gadget
Bug# 15: Background image doesn't change if it's changed through a stylesheet
Bug# 16: addImageObject holds the image open. If you're developing a Gadget and want to change one of the images, you can't overwrite it.
Bug# 17: Images are cached. If you remove all instances of a Gadget, change the images within it and then re-add it to Sidebar, the old images still show.
Bug# 18: If a Gadget is partially off screen, Sidebar shifts it so it's completely on screen on loading.
Bug# 19: <g:background>.blur / <g:background>.softEdge effect is positioned incorrectly. It doesn't take account of the top and left parameters.
Bug# 20: When digitally signing a Gadget, if the filename is long the signature is corrupt:
Bug# 21: The GPO Policy setting ""Turn Off User Installed Windows Sidebar Gadgets"", also stops users from adding Gadgets in the "Shared Gagets" folder:
Bug# 22: <BODY onunload> doesn't fire during logout and shutdown.
Bug# 23: Flyout background colour cannot be set from a stylesheet.
Bug# 24: Gadget may never appear on the sidebar if you have overlayed RGB transparent images and are updating the screen too often.
Bug #25: Flyout will only show if Sidebar has focus. If you show the Flyout via " = true" and Sidebar doesn't have focus, the "System.Gadget.Flyout.onHide" event immediately fires.
Bug #26 System.Shell.saveFileDialog(strPath, strFilter) filter string doesn't work as expected
Bug #27 System.Gadget.begin/endTransition corrupts g:background. It happens regardless of what transition type you use, or if you use an image or not. In the following Repro, Left click to see the problem. Right click to see, with the workaround.
Bug #28 g:background becomes corrupt if you change In the following Repro, Left click to see the problem. Right click to turn on the workaround.
Bug #29 If the g:background image is set to a percentage of the Gadget size, it's not rescaled when the Gadget body size changes. In the following Repro, Left click to see the problem. Right click to turn on the workaround.
Bug #30 begin/endTransition can hang a Gadget, if the body size isn't changed. In the following Repro, the image should toggle between two images. Right click to toggle with the workaround, Left click to recreate the problem.
Bug #31 System.Gadget.background="..." will corrupt the image if it's height is less than 57 pixels. If you set a Gadget background via System.Gadget.Background = "..." to an image that is less than 57 pixels in height that has partially transparent pixels, the background becomes corrupt. Sidebar stretches the transparent pixels to 57 pixels in height, but leaves the opaque pixels their original size.
Bug #32 g:background "blur" and "softEdge" cause the partially transparent background pixels to overlay the Gadget when focus is lost. In the Repro, move the Gadget to reproduce the problem.


How to play a .ASX stream from a gadget

Here is a very simple gadget that shows how to play a stream from an ASX file that is in the Gadget folder for the current gadget.

It is very basic

CSS File

    font-family: Segoe UI, Tahoma, Sans-Serif;
    background-color: white;
    border: ridge 2px
    font-size: 8pt;


<title>ASX Playertitle>\
<link href="css/Radio.css" rel="stylesheet" type="text/css" />
<script language="javascript" src="js/Radio.js" type="text/javascript">script>

This is a simple sample of how to play an ASX file
<a href="javascript:void" onclick="startStream()">click here to start streama>

<OBJECT id="mediaPlayer" width="0" height="0" style="position:absolute; left:0;top:0;" CLASSID="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6"
<PARAM NAME="SendPlayStateChangeEvents" VALUE="True">
<PARAM NAME="AutoStart" VALUE="False">
<PARAM name="uiMode" value="invisible">


Javascript File

function startStream()
    mediaPlayer.url = System.Gadget.path+


<asx version="3.0">
ref href="" />

Basically this gadget just loads Windows Media Player and when you click on the link in the html file it will start streaming.

The reason this was written was to help answer a forum question

Click here to download this as a gadget

Another Windows Vista Gadget - Air New Zealand - Grab a seat


AIR NEW ZEALAND have made their RSS feed unusable as it contains no details any more of the prices, flights etc and hence this gadgetno longer has any value unless you want to see the source code!


I have written another Windows Vista Gadget, this time at the request of Darryl Burling who works for Microsoft New Zealand. He asked if I could turn the RSS feed on the Grab A Seat site into a gadget. The gadget I have written requests the feed every 5 minutes and just displays what is available, never actually storing the feed but just consuming it. The items in the list are removed when no seats remain for that promotion.

You need to be quick as there have been some fares from Auckland to Los Angeles for $498 return and the also Auckland - Shanghai return for $498.

Domestic fares don't run out as fast as the international, but I did notice the other day that the fares had changed by 2am so the early bird will get the seat in this case.

So what is Grab A Seat?, well as far as Air New Zealand is concerned it is this “Ludicrously low fares up for grabs“

To learn more about the Air New Zealand promotion see

What the gadget looks like:

With the flyout open it looks like this:

You can download it from my Windows Live Gallery profile:

What you need to know: These fares are only available online for one day only or until sold out. Seats are strictly limited - see the online 'counter' for the number of seats left. Travel periods are strictly limited and fares may not be available on all flights or days during stated travel period. Flight restrictions and routing restrictions apply. Prices are per person, child discounts do not apply. General terms and conditions and Smart Saver and/or Global Saver Max terms and conditions apply.

Windows Vista Gagdet - Example of talking to SQL Server

I have created a simple example of a Windows Vista Gadget that will talk to SQL Server using OLEDB with ADO.

This code is very similar to code that one would have used in the past with writing code for ASP pages.

The code is written in Javascript and DHTML.

Basicall the code works like this:

The gadget has an HTML body tag and we assign an onload event to it to trigger our Javascript code which will talk to SQL Server and render all the categories from the Northwind database.

<body scroll="no" onload="loadMain()">

Our simple code in the loadMain event is as follows:

function loadMain()
serverName = "server";
var database = "northwind";
var username = "sa";
var password = "-";

if (password == "-")
data =
"this is a sample - please configure the servername, database, username and password variables in \\js\\sql.js";
    var oSqlConnection = new ActiveXObject("adodb.connection");
"Provider=sqloledb;Data Source=" + serverName + ";Initial Catalog="+database+";User Id="+username+";Password="+password+";");
   var oRecordSet = oSqlConnection.Execute("SELECT CategoryID, CategoryName from Categories");  
   var data = "";
   while (oRecordSet.eof == false)
        data = data + oRecordSet(1) +
"data").innerHTML = data;|

This code shows a simple way to to talk to SQL Server, run a query and then render the results to an HTML tag.

You can download this code from here

For you to run this code there are a few things you will need to do first.

  1. Have a SQL Server available which has the Northwind database ( you can change the connection string and query )
  2. Change the server variable to the server that is running SQL Server
  3. Change the database if required
  4. Chnage the username if required
  5. Change the password

This is just an example and is really up to you how you may use it. I hope it helps with your gadget development.

Windows Vista Gadgets

I have been playing aroung with Windows Vista Gagets lately and have currently written about 10. Some are for my work - simple things like who is on Helpdesk duty today, and another for our IS Severity system that will show up planned outages and unplanned outages, colour coded based on the rating of the problem. This is similar to an RSS feed except the data is always live and not cached so that when a job is closed it is removed from the list.

Another is the Weather Gadget for, a collegue at works owns the site and I have written the Web Site UI and a few tools. This has become quite popular in the last few days since it was uploaded to

Another 5 are simple radio station gadgets for New Zealand radio stations News Talk ZB, Radio Pacific, MoreFM, ZM, and RDU.

 The weather and the radio station gadgets are all available from and clicking on my profile link will take you to a page where they all are.

My Gadgets

For those looking into writing your own gadgets see these resources

Hint: If you want to see the source for any gadget, download it, and then rename from .gadget to .zip and you have all the source code.