有没有办法检测哪些Windows XP主题正在使用?
我怀疑你没有特定的api调用,但是你可以通过检查一些DOM元素,即特征检测来解决这个问题。
另一个问题:经典主题是否甚至存在于Windows Vista或Windows 7上?
编辑 - 这是我的解决方案:
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 XP中测试了这个,所以vista和windows 7可能会给出不同的颜色值,但它应该很容易添加。
以下是此操作的演示页面:
答案 0 :(得分:6)
有趣的问题。我唯一想到的是检查默认按钮的大小。它在两个主题中的风格不同,我想它有不同的大小。如果您为按钮指定固定的文本大小,这可能是中途可靠的。
我将启动XP虚拟机并检查尺寸是否实际不同。
更新:他们确实有所不同。
谷歌“我感觉很幸运”按钮首先想到的第二种不太可靠的方法是给元素CSS system colour,然后解析生成的计算颜色。在经典模式下,ButtonFace
属性将具有特定的灰色阴影,并且我认为在默认皮肤中具有不同的颜色。再次,必须进行测试。
更新:他们也有所不同。
ButtonFace
CSS系统颜色
显然,如果用户对颜色和/或字体大小进行任何自定义,这两种方法都会中断。字体大小方法是更可靠的IMO,因为玩弄它的人越来越少。
当然,您必须拥有所有Windows代的比较表,因为可能,经典和默认外观的值会有所不同。
答案 1 :(得分:-1)
只是为了一个起点来寻找IsThemeActive()