2010-03-15 7 views
6

사용중인 Windows XP 테마를 감지하는 방법이 있습니까?javascript : XP 또는 Classic windows 테마가 활성화되어 있는지 확인하십시오.

내가 할 수있는 특정 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가 아닌 시스템에 반환 및/또는 창 상자를 감지하는 방법을 알아낼 무엇인지 파악하는 것입니다 : -

편집이 내 솔루션입니다. 나는 비스타와 윈도우 7이 다른 색상 값을 줄 수 있기 때문에 윈도우 XP에서만 이것을 테스트했다.하지만 그것은 쉽게 추가 할 수 있어야한다. 여기

행동이의 데모 페이지입니다 :

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

+2

예, 클래식 테마는 최신 Windows 버전에 계속 존재합니다. 사용중인 테마가 웹 페이지에서 알 수있는 것이기는하지만 심하게 의심합니다. 방법이 있다면 Windows XP처럼 보이는 팝업 광고가 몇 년 전에 올바른 스타일을 사용했을 것입니다. – Joey

+0

좋은 물건들 mkoryak! VM에서 Win XP 서비스 팩 3에 대한 테스트 결과 : Firefox 3.5는 둘 다 올바르게 감지합니다. IE6도 아무 것도 말할 수 없다. (그러나 나는 그것이 예상 된 것이라고 생각한다.) –

+0

@Pekka : 실제로 IE6가 작동하지 않게 만든 것은 내 바보 같은 감독이었다. 나는 그것을 고쳐 지금은 IE6 작품 =) – mkoryak

답변

6

흥미로운 질문입니다. 마음에 떠오르는 유일한 것은 기본 버튼의 크기를 확인하는 것입니다. 두 테마 모두 다르게 스타일이 지정되어 있으며 다른 크기를 가지고 있다고 가정합니다. 버튼에 고정 된 텍스트 크기를 지정하면 반쯤 신뢰할 수 있습니다.

XP 가상 머신을 시작하고 크기가 실제로 다른지 확인해 보겠습니다.

업데이트 : 그들은 다릅니다.

구글은 고전 피부 버튼

  • "나는 운이 좋은 기분"(! 원문) 99 X 23.75 XP 피부에
  • 를 픽셀 : 97 X 21.75 픽셀

두 번째 신뢰도가 낮은 접근 방식은 요소에 CSS system colour을 부여한 다음 결과 계산 된 색을 구문 분석하는 것입니다. 클래식 모드에서는 ButtonFace 속성이 특정 회색 음영을 나타내고 은 기본 스킨에서 다른 하나가이라고 생각합니다. 다시 테스트해야합니다.

업데이트 :도 다릅니다.

ButtonFace

CSS 시스템 색

Windows 기본 피부
  • : 사용자가 색상 모든 사용자 정의를 한 경우에 ECE9D8
분명히

이 두 접근이 중단됩니다 # : #의 D4D0C8 XP 피부에

  • 및/또는 글꼴 크기. 글꼴 크기 접근법은 IMO의 안정성이 뛰어납니다.

    물론 모든 Windows 세대에 대한 비교 테이블을 가져야합니다. 클래식 및 기본 스킨의 값이 다를 수 있습니다.

  • +0

    나는 믿을만한 방법이 더 신뢰할 수있는 것 같아요, 버튼은 이미 CSS에 의해 스타일이있을 수 있으므로, 당신이 그것을 만들 때, 당신은 기본 크기를 얻을 수 없습니다. 그래도 두 가지 방법으로 모두 시도해보십시오. – mkoryak

    +0

    @mkoryak 테스트 결과를 추가했습니다. –

    +0

    @mkoryak 특정 버튼에'font-size'를 강제하고 다른 모든 속성 (높이, 패딩 등)을 재설정하면 신뢰할 수있는 결과를 얻을 수 있어야합니다. 그래도 많이 재설정해야합니다. –

    -1

    IsThemeActive()의 시작점 찾기를 제공하기 만하면

    +0

    오류로 업데이트 된 질문, thats는 C++처럼 보입니다. 자바 스크립트에 대해 이야기하고있었습니다. – mkoryak

    관련 문제