SSブログ

画面のスケーリングを調べる [JavaScript]

またHTAですみません。
getDPI.png
最近のブラウザは、ピクセル指定しても、dot by dotにはならず、文字の大きさに合わせてスケーリングしてくれているみたい。
でもHTAは古いので、画面のスケーリングに対応できておらず、ピクセル指定と、文字幅指定で差がでてしまいます。
でも、HTAにおけるウインドウサイズの変更はピクセル指定なので、スケーリングの倍率分をかけてあげないといけません。
エクセルのDLL呼び出しでやってみました。
以下を参考にしました。

ディスプレイの拡大率取得 -コントローパネルのディスプレイから、「デスクト- | OKWAVE
https://okwave.jp/qa/q8972028.html

DLLはよくわからず使っているので、間違っていたらごめんなさい。
解像度とかの意味合いや言葉の定義などもあいまいな理解のままで、とりあえず動けばいいという感じですみません。
<thml>
<head>
<title>ディスプレイの拡大率</title>
<script>
function getDPI() {     // 参考:https://okwave.jp/qa/q8972028.html
    var excel = new ActiveXObject('Excel.Application');         // Excelオブジェクト生成
    try {
        var hWndDesk = excel.ExecuteExcel4Macro( 'CALL("user32", "GetDesktopWindow", "J")' );
        var hDCDesk  = excel.ExecuteExcel4Macro( 'CALL("user32", "GetDC", "JJ", ' + hWndDesk + ')' );
        var logPix   = excel.ExecuteExcel4Macro( 'CALL("gdi32",  "GetDeviceCaps", "JJJ",' + hDCDesk + ',88)' );
        excel.ExecuteExcel4Macro( 'CALL("usr32",  "ReleaseDC", "JJJ",' + hWndDesk + ',' + hDCDesk + ')' );
        excel.Quit();
        excel = null;
        return logPix;
    } catch(e) {
        excel.Quit();
        excel = null;
        return -1;      // エラーの場合は、-1を返す
    }
}

function main() {
    var dpi = getDPI();
    document.getElementById('DPI').innerHTML = ' 論理解像度は' + dpi + ' DPIです。';
    window.resizeTo( 460 * dpi / 96, 320 * dpi / 96 );
}
</script>
</head>
<body>
<h1>getDPI</h1>
<p style="width:400px;background:skyblue;">width=400px</p>
<p style="width:25em; background:skyblue;">width=25em</p>
<p>通常ブラウザか96DPIなら同じ長さ(16px=1.00em)
<p><button onclick="main()">解像度に合わせウインドウサイズを変更<br>96 DPI換算で460x320</button>
<p id="DPI"></p>
</body>
</html>

タグ:HTA
nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。