blechmusikの日記

キー・カスタマイズ・ソフトウェア "DvorakJ" の覚え書きをはじめとして様々なことを書いています。

「DllCall を使用してフォントサイズを取得する AutoHotkey の関数」を修正した

DllCall を使用してフォントサイズを取得する AutoHotkey の関数 - blechmusik2の日記では、以下のように設定していた。

getDPI() {
;;; How to detect Normal or Large font size settings (DPI)
;;; http://www.autohotkey.com/forum/post-198727.html&sid=5f964c930528a1331705e692e5bcf639#198727
;;; Posted: Mon May 26, 2008 6:31 pm

    hDC := DllCall("GetDC")
    dpi := DllCall("GetDeviceCaps", UInt, hDC , UInt, 88)
    DllCall("ReleaseDC",Int, 0, UInt, hDC)

    return dpi ? dpi : 0
}

この設定には不具合があった。EXE 化していない AutoHotkey としてならこの関数は dpi の値を返すが、EXE 化すると、 0 しか返さなくなるのだ。
このような症状を踏まえ、以下のように修正した。GetDC 関数に引数 0 を渡すようにしたのだ。

getDPI() {
;;; How to detect Normal or Large font size settings (DPI)
;;; http://www.autohotkey.com/forum/post-198727.html&sid=5f964c930528a1331705e692e5bcf639#198727
;;; Posted: Mon May 26, 2008 6:31 pm

    hDC := DllCall("GetDC", Int, 0)
    dpi := DllCall("GetDeviceCaps", UInt, hDC , UInt, 88)
    DllCall("ReleaseDC",Int, 0, UInt, hDC)

    return dpi ? dpi : 0
}

こう書き換えることで、EXE 化したスクリプトが想定通りの動作をするようになった。