プログラミング工房 > HSP > サンプルスクリプト > 

実行ファイルがGUIアプリかCUIアプリか調べる

 Windowsで特定のパスにある実行ファイルがGUIアプリかコンソール・アプリかを見分けるには、実行ファイル自体に埋めこまれたサブシステムを表す値を参照する必要があります。

 通常のWindowsアプリの実行ファイルは、MS-DOS上で実行するためのプログラムとWindows上で実行するためのプログラムが合体した形式になっていて、サブシステムを表す値はWindows用プログラムのエリアに埋めこまれています。(最近のアプリではMS-DOS用のプログラムは中身のないダミーであることが多い)

 サブシステムの値の位置を特定するには、まずMS-DOS用のプログラムエリアに埋めこまれているWindows用プログラムエリアの開始位置(=PEシグネチャへのオフセット)を参照し、その開始位置にサブシステムを表すデータへのオフセット(固定値)を加えます。この位置にある2バイトのデータが目的の情報です。

 値が表す意味は下のスクリプトのマクロにある通りです。例えばHSPで作成した実行ファイルを下のスクリプトでチェックすると2か3になります。

 ちなみにWin32APIの"GetBinaryType"という関数はWin32/Win16/DOSの種別を判定できるだけで、HSPで作成した実行ファイルをチェックすると、"hsp3cl.hrt"を使うか否かに関わらず「Win32」と判定されます。

 このページを作るにあたっては、『逆アセのスス乂』というページを参考にさせていただきました。

 >> スクリプトを見る

 >> ダウンロード