JavaScript: определить, включена ли тема XP или Classic Windows - PullRequest
6 голосов
/ 15 марта 2010

Есть ли способ определить, какая тема Windows XP используется?

Я подозреваю, что нет никакого конкретного вызова API, который вы можете сделать, но вы можете выяснить это, проверив что-то на некотором элементе DOM, то есть обнаружении функции.

Другой вопрос: существует ли классическая тема даже в Windows Vista или Windows 7?

edit - это мое решение:

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 могут давать разные значения цвета, хотя добавить их будет легко.

Вот демонстрационная страница в действии:

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

Ответы [ 2 ]

6 голосов
/ 15 марта 2010

Интересный вопрос. Единственное, что приходит на ум - это проверка размера кнопки по умолчанию. Он стилизован по-разному в обеих темах, и я предполагаю, что он имеет разные размеры. Это может быть надежно, если вы дадите кнопке фиксированный размер текста.

Я запускаю виртуальную машину XP и проверяю, действительно ли размеры отличаются.

Обновление: Они отличаются.

Кнопка Google "Мне повезет"

  • в классическом скине: 99 x 23,75 (sic!) Пикселей
  • в скине XP: 97 x 21,75 пикселей

Второй, менее надежный подход, который приходит на ум, - это дать элементу системный цвет CSS , а затем проанализировать полученный вычисленный цвет. В классическом режиме свойство ButtonFace будет иметь определенный оттенок серого, и я думаю, что отличается от стандартного. Опять же, должен быть проверен.

Обновление: они тоже различаются.

ButtonFace Цвет системы CSS

  • в классической оболочке Windows: # D4D0C8
  • в скине XP: # ECE9D8

Очевидно, что оба подхода сломаются, если пользователь выполнит какую-либо настройку цвета и / или размера шрифта. Подход с использованием размера шрифта является более надежным IMO, так как с этим меньше людей играют.

Вы, конечно, должны иметь таблицы сравнения для всех поколений Windows, так как, предположительно, значения для классического и стандартного скина будут отличаться.

0 голосов
/ 21 марта 2010

просто, чтобы дать отправную точку для поиска IsThemeActive ()

...