javascript: detect if XP or Classic windows theme is enabled

Posted by mkoryak on Stack Overflow See other posts from Stack Overflow or by mkoryak
Published on 2010-03-15T20:10:22Z Indexed on 2010/03/21 20:51 UTC
Read the original article Hit count: 555

Is there any way to detect which windows XP theme is in use?

I suspect that there is no specific api call you can make, but you may be able to figure it out by checking something on some DOM element, ie feature detection.

Another question: does the classic theme even exist on windows vista or windows 7?

edit - this is my solution:

function isXpTheme() {
  var rgb;
  var map = { "rgb(212,208,200)" : false,
              "rgb(236,233,216)" : true };
  var $elem = $("<button>");
  $elem.css("backgroundColor", "ButtonFace");
  $("body").append($elem);
  var elem = $elem.get(0);
  if (document.defaultView && document.defaultView.getComputedStyle) {
    s = document.defaultView.getComputedStyle(elem, "");
    rgb = s && s.getPropertyValue("background-color");
  } else if (elem.currentStyle) {
    rgb = (function (el) { // get a rgb based color on IE
    var oRG =document.body.createTextRange();
    oRG.moveToElementText(el);
    var iClr=oRG.queryCommandValue("BackColor");
      return "rgb("+(iClr & 0xFF)+","+((iClr & 0xFF00)>>8)+","+
                  ((iClr & 0xFF0000)>>16)+")";
    })(elem);
  } else if (elem.style["backgroundColor"]) {
    rgb = elem.style["backgroundColor"];
  } else  {
    rgb = null;
  }
  $elem.remove();
  rgb = rgb.replace(/[ ]+/g,"")
  if(rgb){;
    return map[rgb];
  }
}

Next step is to figure out what this function returns on non-xp machines and/or figure out how to detect windows boxes. I have tested this in windows XP only, so vista and windows 7 might give different color values, it should be easy to add though.

Here is a demo page of this in action:

http://programmingdrunk.com/current-projects/isXpTheme/

© Stack Overflow or respective owner

Related posts about JavaScript

Related posts about Windows