blechmusikの日記

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

AutoHotkey を用いて、OS が 64 bit か 32 bit かを判別する

AutoHotkey スレッドで表題のとおりの質問が出ていた*1。質問者が行ったのは、"Program Files"のパス名に (x86) が含まれれていれば 64 bit 、そうでなければ 32 bit と判定するものである。なるほど、通常のパソコンであればこれで判定しうるだろう。ただし、例外はある。32 bit のパソコンにおいて、"C:\Program Files (x86)" というフォルダが意図的に作成されているならどうだろうか?そのときには正しく判定できないと考えられる。
私はつぎのような処理を考えた*2

is_OS_64bit(){
  ; OS が 64 bit なら True を、それ以外なら False を返す

  ; IsWow64Process Function (Windows)
  ; http://msdn.microsoft.com/en-us/library/ms684139(v=vs.85).aspx
  return % (DllCall("IsWow64Process", "UInt", DllCall("GetCurrentProcess"), "Int*", IsWow64Process)) ? IsWow64Process : False
}

別の回答例はLexikosさんが示している*3。参考にしてほしい。