首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >javascript:检测是否启用了XP或经典windows主题

javascript:检测是否启用了XP或经典windows主题
EN

Stack Overflow用户
提问于 2010-03-15 20:10:22
回答 2查看 1.5K关注 0票数 6

是否有任何方法来检测哪个windows主题正在使用?

我怀疑您没有具体的api调用,但是您可以通过检查某个DOM元素(即特性检测)来找出它。

另一个问题:的经典主题甚至存在于windows vista或windows 7上吗?

编辑-这是我的解决方案:

代码语言:javascript
运行
复制
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];
  }
}

下一步是找出这个函数在非xp机器上返回的内容和/或找出如何检测窗口框。我只在windows中测试过这一点,所以vista和windows 7可能会给出不同的颜色值,但是应该很容易添加。

下面是该操作的演示页面:

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-15 20:15:20

有趣的问题。想到的唯一事情就是检查默认按钮的大小。在这两个主题中,它的样式都不同,我认为它的大小也不同。这可能是半途而废,如果你给按钮一个固定的文本大小。

我将启动XP虚拟机,并检查大小是否实际不同。

更新:它们确实不同。

谷歌“我感到幸运”按钮

  • 经典皮肤:99x23.75(原文如此!)像素
  • XP皮肤: 97 x 21.75像素

第二种不太可靠的方法是给一个元素一个CSS系统颜色,然后解析得到的计算颜色。在经典模式下,ButtonFace属性将有一个特定的灰色阴影,我认为在默认的皮肤中有一个不同的颜色。再一次,必须进行测试。

更新:也不同。

ButtonFace CSS系统颜色

  • Windows经典外观:#D4D0C8
  • 在XP皮肤中:#ECE9D8

显然,如果用户对颜色和/或字体大小进行了任何定制,这两种方法都会中断。字体大小方法是更可靠的国际海事组织,因为有更少的人玩这一点。

当然,您必须为所有Windows代提供比较表,因为根据推测,经典皮肤和默认外观的值将有所不同。

票数 6
EN

Stack Overflow用户

发布于 2010-03-21 20:50:06

只是给一个起点寻找IsThemeActive()

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2450133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档