Skip to main content

Make a gadget

Creating gadgets for Windows is very easy. So easy, in fact a class 8 kid can make them, provided he knows basic stuff like HTML, JavaScript and CSS. Even then there are issues that are faced when you start doing things the first time. So I may just be able to get you started. By the end of it, you will probably say to yourself that this was just sooooo easy.

First thing first. You must know HTML, CSS and basic JavaScript, otherwise what I will write here will look like Sumerian to you. So if you wish to take a look and brush up your skills, here are the links to go. I'll wait.



Yes I am a particular fan of w3schools, mainly because they have got a code testing playground, invaluable for immediate testing and experimentation. 

Now that you are ready, lets get started.

The Bare Layout of a Windows Sidebar Gadget
A gadget is simply a webpage with its scripts, stylesheets and everything, only that it is zipped into an archive such that the .zip extension is smartly changed to .gadget. So if you already design webpages, all you need to know is how to create a manifest file and zip everything into a .gadget file. A manifest is nothing scary, just a file that contains data about the data or metadata. It will contain information like who you are, who programmed it, the name of the gadget, the HTML file to be used, the version number and all the information you want to share, all in neat tags. I'll come to that later. 

So, now the bare layout is this,

Basic layout of a Windows Sidebar gadget
Yes, this whole thing is compressed into a zip archive and the extension is changed to .gadget.

So first let us create the Webpage

HTML

I intend to keep this very very simple. So lets create a simple HTML. But wait, I don't like those Hello World programs. So lets make something simple, but still pretty cool.


<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> 
<html xmlns=”http://www.w3.org/1999/xhtml”>
  <head>
    <style type="text/css">
    </style>
    <script>
      <!--
      //-->
    </script>
  </head>
  <body>
   </body>
</html>

Now that's a skeleton HTML. So I will add a style, a script, javascript that is and some page elements.
First lets write the javascript.

JAVASCRIPT

function runChrome() 
{ 
var shell = new ActiveXObject("WScript.shell"); 
if (shell)
{ 
shell.run("chrome.exe"); 
return true;
} 
else
{
alert("Google Chrome is not installed on your system."); 
}
}


Pretty simple. Just getting some help of the Windows Scripting Host. It just fires chrome.exe, provided it is installed, otherwise a nasty alert will popup on the screen.

CSS

In this very basic example, I don't feel like using an external CSS file. But for more serious projects, it is almost a rule to keep CSS files in their own directories and sourcing them from the HTML code. But here our CSS code is too basic to warrant any extra attention.


<style type="text/css">
body
{
       margin: 0;
       width: 133px;
       height: 133px;
}
    </style>
Just setting the size of the gadget and nothing else.

Now it is safe to go back to the HTML.

HTML


<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> 
<html xmlns=”http://www.w3.org/1999/xhtml”>
  <head>
    <style type="text/css">
body
{
       margin: 0;
       width: 133px;
       height: 133px;
}
    </style>
    <script language="JavaScript" src="js/chrome.js"></script>
    <script>
      <!--
      function roll(img_name, img_src)
    {
    document[img_name].src = img_src;
    }

      //-->
    </script>
  </head>
  <body background="images/bg.png">
    <table border="0">
      <tr>
        <td>
<img height="128" src="images/background.png" onclick="return runChrome()" name="sub_but" 
onmouseover="roll('sub_but','images/newBackground.png')" 
onmouseout="roll('sub_but','images/background.png')" 
onmousedown="roll('sub_but','images/background.png')" 
onmouseup="roll('sub_but','images/newBackground.png')">
</td>
</tr>
    </table>
  </body>
</html>

Let's name it mychrome.html

Now look carefully, I have inserted an extra javascript inside as well. It just has a function roll that just accepts the name and source image as parameters and sets them to the tag owner. Such one line functions are useless and shorthands are prefereable but here I still felt like mentioning. 

The rest is simple and self explanatory, call the mouse action events and pass the parameters to the function. Ofcourse, make sure you have the images as seen in those pngs.

Now just create the XML file such that the name of the HTML is mentioned exactly in the XML like this.

XML


<?xml version="1.0" encoding="utf-8" ?>
<gadget> 
<name>myChrome</name> 
<namespace>Sarthak Ganguly</namespace> 
<version>1.0.0.0</version> 
<author name="Sarthak Ganguly"> 
<info url="http://sgownblog.blogspot.com" text="Vist my blog" /> 
<logo src="images/logo.png" /> 
</author> 
<copyright>&#0169; 2011</copyright> 
<description>Chrome launcher application gadget with Metro UI</description> 
<icons> 
<icon width="128" height="128" src="images/logo.png" /> 
</icons> 
<hosts> <host name="sidebar"> <base type="HTML" apiVersion="1.0.0" src="myChrome.html" /> <permissions>Full</permissions> <platform minPlatformVersion="0.3" /> 
</host> </hosts> 
</gadget>

Now just zip everything. A <filename>.zip is created. Now rename it to <filename>.gadget. The icon will immediately change and you will have your gadget ready. For example download this gadget and see the interiors by just extracting it.


Hope you enjoyed reading this article. Please share if it helped you. Happy Coding!



Comments

Popular posts from this blog

Stalingrad 2013 Movie Review

I saw the trailer of this movie once and really really liked it. What was really interesting was the Thomas Kretschmann acted in a movie with the same name exactly 20 years back. Stalingrad was released in 1993 and the young Kretschmann played the role of a dutiful but conscientious German leutnant of the ill fated 6th Armee. Here also he comes back, slightly older and rugged. The spectacular visuals, the background sound and the lack of background music makes it a realistic watch. That is all positive that I have to say about this trash. Yes, that's what I will this. Naturally, while watching this I brought in similar scenes of Stalingrad (1993) among other war movies. And in comparison this movies cuts so sorry a figure that I dared not watch the entire movie even! The story starts of slow enough and just completely refused to pick up pace. The entire movie seemed to be directed by an amateur school student, bolstered by some insanely talented special effects team. This made t...

Bangalore - Where I now live!

Life in Bangalore Bangalore or Bengaluru is one of the strangest places I have ever been. First, I'll call it Bangalore. In any case I am not really fond of this place, and the official name just makes me go nuts. Literally! Bangalore techie in action! Lets start with the good things in Bangalore. The advantage is that for me there ain't much good here so this paragraph is going to be short! Bangalore has excellent weather, inspite of not being the hills. Weather in Bangalore is always temperate, with the mercury hovering from 68 and 78 Fahrenheit. So yeah, unlike in other Indian metro cities, here we don't have to sweat. Electricity costs are also cut down because we don't need air conditioners or even fans. The other good thing about Bangalore is its vicinity to various tourist spots in South India. Be it the Nilgiris or the Malabar, Konkan or Goa, all are within reach and easily. Seriously??? Now lets begin the negative aspects of the city. I will ment...

Getting back to making stuff

I was off for a while. I mean, I was not. I painted an old shoecase that now looks a gorgeous white cupboard. I fixed my bicycle.  But beyond this, I did not do much beyond what my work paid me to do. So here I am, about to touch a new year of my life - and I am itching to get back into the habit of writing again.  Not just writing stuff here, but also making applications or music.  In fact, after a very long time I feel like sketching again. I think I am going to sketch my wife. Or may be finish my ex wife's sketch. I dunno. But I am gonna get started with a pencil tomorrow. Thanks to chatgpt, I have restarted my application brainstorming and dusted my old Github repos.  I think this is going to be a good run this time.