WebサイトでJavaScriptのActiveXObjectオブジェクトを使用してハードウェア情報(ディスプレイ数、解像度)を取得し、単一の2画面ジャンプを行う

34456 ワード

前言:最近の2日間の仕事の上で、1つの機能を実現して、友达の阿聡の助けの下で、比較的に良い解決のこの需要です.
B/SのWebサイトでは、ボタンをクリックする必要がある場合、クライアントが接続しているディスプレイ(モニタ)の数に応じて行い、単一の画面をジャンプして新しいページを表示します.
 
Webサイトであるため、プロジェクトはサービス側に公開され、バックグラウンドでハードウェア情報を読み、サーバのハードウェア情報も読みます.
そこでJSのActiveXObjectオブジェクトを用いて,ハードウェアのディスプレイ(モニタ)情報,例えば数,解像度を読み取ることを考える.
ここではActiveXObjectオブジェクトを使用するが、プロジェクト制限用はIE 9であるため、ウィンドウを開く用はwindowである.open()
 
ActiveXObjectオブジェクトを作成し、モニタの情報を照会します.
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");

//   
var xsq = new Enumerator(service.ExecQuery("select * from Win32_DesktopMonitor"));

//           
//   2    ,  2    ;  ,  1    
//        3    ,       。
var xsq1Width;
var xsq1Height;
var xsq2Width;
var xsq2Height;
var i = 1;

for (; !xsq.atEnd() ; xsq.moveNext()) {
  if (i == 1) {
    xsq1Width = xsq.item().ScreenWidth;
    xsq1Height = xsq.item().ScreenHeight;
  } else if (i == 2) {
    xsq2Width = xsq.item().ScreenWidth;
    xsq2Height = xsq.item().ScreenHeight;
  }
  i++;
}

 
なぜ私が取るのはモニタの解像度で、モニタのNameではありません.これは、取得したデータに基づいて発見されます.1画面の場合、モニタ2の解像度は幅、高さに値があり、モニタ2の解像度は幅、高さはnullです.
これにより、解像度が広く、高さがnullであるか否かにより、単画面であるか否かを判断する.
//     
if (xsq2Width == null && xsq2Height == null) {
    window.open("about:blank", "", "top=0,left=0,width=" + xsq1Width + ",height=" + xsq1Height + "");
}
else {
    //   
}

 
2画面の時、windowを使うことを発見します.screenLeft、window.screen.width、window.screen.Height、得られたモニタ1、2の幅/高さ
どちらがメイン画面なのか判断します.プログラムがメイン画面で起動したとき、サブ画面で起動したとき.
//   1   
if (window.screen.width == xsq1Width && window.screen.height == xsq1Height) {
  if (window.screenLeft >= 0 && window.screenLeft < xsq1Width) {
    //     
    window.open("about:blank", "", "top=0,left=" + xsq1Width + ",width=" + xsq2Width + ",height=" + xsq2Height + "");
  }
  if (window.screenLeft >= xsq1Width && window.screenLeft < (xsq1Width + xsq2Width)) {
    //     
    window.open("about:blank", "", "top=0,left=0,width=" + xsq1Width + ",height=" + xsq1Height + "");
  }
}
// 2 if (window.screen.width == xsq2Width && window.screen.height == xsq2Height) {   if (window.screenLeft >= 0 && window.screenLeft < xsq2Width) {     //     // , 。
    
window.open("about:blank", "", "top=0,left=0,width=" + xsq1Width + ",height=" + xsq1Height + "");   }   if (window.screenLeft >= (-xsq1Width) && window.screenLeft < 0) {     //     var objWin = window.open("about:blank", "", "top=0,left=0,width=" + xsq2Width + ",height=" + xsq2Height + "");   } }

上のコードでは、新しいウィンドウを開いてジャンプし、私の論理では右から左にジャンプするはずですが、なぜかIE 9ではwindow.Open()は左にずれません.
そこで開いた新しいウィンドウの中でwindowを加速するつもりです.moveTo(-ディスプレイ幅、0);これにより、左にシフトする目的を達成します.
<span style="color: #000000;">
        window.moveTo(</span>-1600, 0<span style="color: #000000;">);
</span>

 
最後に完全なコード、すなわちhtmlページを添付します.
DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>JavaScript     title>
   
    <script type="text/javascript">
        window.onload = function () {
            document.getElementById("btnZX").onclick = function () {

                var locator = new ActiveXObject("WbemScripting.SWbemLocator");
                var service = locator.ConnectServer(".");

                //   
                var xsq = new Enumerator(service.ExecQuery("select * from Win32_DesktopMonitor"));

                //           
                //   2    ,  2    ;  ,  1    
                var xsq1Width;
                var xsq1Height;
                var xsq2Width;
                var xsq2Height;
                var i = 1;

                for (; !xsq.atEnd() ; xsq.moveNext()) {
                    if (i == 1) {
                        xsq1Width = xsq.item().ScreenWidth;
                        xsq1Height = xsq.item().ScreenHeight;
                    } else if (i == 2) {
                        xsq2Width = xsq.item().ScreenWidth;
                        xsq2Height = xsq.item().ScreenHeight;
                    }
                    i++;
                }


                //     
                if (xsq2Width == null && xsq2Height == null) {
                    window.open("about:blank", "", "top=0,left=0,width=" + xsq1Width + ",height=" + xsq1Height + "");
                }
                else {
                    alert("
\twindow.screenLeft
" + window.screenLeft + "
\twindow.screen.width
" + window.screen.width + "
\txsq1Width
" + xsq1Width + "
\txsq2Width
" + xsq2Width); // 1 if (window.screen.width == xsq1Width && window.screen.height == xsq1Height) { if (window.screenLeft >= 0 && window.screenLeft < xsq1Width) { // window.open("about:blank", "", "top=0,left=" + xsq1Width + ",width=" + xsq2Width + ",height=" + xsq2Height + ""); } if (window.screenLeft >= xsq1Width && window.screenLeft < (xsq1Width + xsq2Width)) { // window.open("about:blank", "", "top=0,left=0,width=" + xsq1Width + ",height=" + xsq1Height + ""); } } // 2 if (window.screen.width == xsq2Width && window.screen.height == xsq2Height) { if (window.screenLeft >= 0 && window.screenLeft < xsq2Width) { // // window.open("http://localhost:6019/NewPage.html", "", "top=0,left=0,width=" + xsq1Width + ",height=" + xsq1Height + ""); } if (window.screenLeft >= (-xsq1Width) && window.screenLeft < 0) { // var objWin = window.open("about:blank", "", "top=0,left=0,width=" + xsq2Width + ",height=" + xsq2Height + ""); } } } } } script> head> <body> <div> <button type="button" id="btnZX"> button> div> body> html>
DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>   title>
head>
<body>
body>
html>
<script>
        window.moveTo(-1600, 0);
script>

 
以上のすべてのコードは論理的により良い考え方があり、コード的に大きな最適化がある可能性があります.
また、この文章を読んだり、必要としたりした友达に、自分の意見を発表してください.ありがとうございます.