/***********************************************************
実行ファイルがGUI(Windows)アプリかCUI(コマンドライン)
アプリか判定
【2005/12/03 更新】
***********************************************************/
#packopt hide 1
/*
実行ファイルの種類
(http://www.interq.or.jp/chubu/r6/reasm/PE_FORMAT/3_4_2.html参照)
*/
#const SUBSYSTEM_UNKNOWN 0 // 未知のサブシステム
#const SUBSYSTEM_NATIVE 1 // デバイスドライバおよびWindows NTネイティブのプロセス
#const SUBSYSTEM_WIN_GUI 2 // Windows GUIサブシステム内で実行されるイメージ
#const SUBSYSTEM_WIN_CUI 3 // Windows CUIサブシステム内で実行されるイメージ
#const SUBSYSTEM_POSIX_CUI 7 // Posix CUIサブシステム内で実行されるイメージ
#const SUBSYSTEM_WIN_CE_GUI 9 // Windows CE上で実行されるイメージ
/* PEシグネチャへのオフセットの格納位置 */
#const PESIG_OFFSET_POS 60
/* PEシグネチャから実行ファイルの種類を示すデータまでのオフセット */
#const SUBSYS_TYPE_OFFSET 92
/* 実行ファイル選択 */
dialog "exe",16,"実行ファイル"
if stat {
path = refstr
dialog "\""+path+"\"のサブシステムを判定します。"
}
else {
end
}
/* 実行ファイル読み込み */
exist path
size = strsize
sdim buf,size+1
bload path,buf,size,0
/* ファイル先頭からのPEシグネチャへのオフセット */
offset = lpeek(buf,PESIG_OFFSET_POS)
/* サブシステムの種類を取得 */
type = wpeek(buf,offset+SUBSYS_TYPE_OFFSET)
switch type
case SUBSYSTEM_WIN_GUI
dialog "サブシステムは「Windows GUI」です。",,"判定結果"
swbreak
case SUBSYSTEM_WIN_CUI
dialog "サブシステムは「Windows CUI」です。",,"判定結果"
swbreak
default
dialog "サブシステムは「その他」です。",,"判定結果"
swend
end
|