GetBinaryType 実行ファイルの種類を取得

Cの宣言:

BOOL GetBinaryType(
	CONST LPTSTR FileName,
	LPLONG BinType);

VBの宣言:

Declare Function GetBinaryType Lib "kernel32" Alias "GetBinaryTypeA" ( _
	ByVal sFileName As String, _
	ByRef BinType As Long) As Long

説明:

FileNameで指定した実行ファイルの種類を取得し、結果をBinTypeで指定した変数に格納する。この関数は、DLLやバッチファイルに対しては効果が無い。

この関数は、NTで使用可能である。(95では使用不可だが、Win32sでは使用可能とされている)

引数の意味は、以下の通り。
FileName(IN) ファイル名を表す文字列
BinType(OUT) ファイルの種類を格納する変数。詳細については、後述の表を参照。

BinTypeに返されるファイルの種類は、以下のフラグのどれか一つである。
SCS_32BIT_BINARY 32bit Windowsアプリケーション
SCS_DOS_BINARY DOSアプリケーション
SCS_OS216_BINARY 16ビットのOS2のアプリケーション
SCS_PIF_BINARY PIFファイル
SCS_POSIX_BINARY POSIXアプリケーション
SCS_WOW_BINARY 16bit Windowsアプリケーション

戻り値は、関数の実行に成功したか否かを表す真偽値である。

主なエラーは、以下の通り。
ERROR_BAD_EXE_FORMAT 実行可能ファイルではない。
ERROR_FILE_NOT_FOUND 指定されたファイルは存在しない。

Cのサンプル:

/* c:\windows\notepad.exeの種類を表示する。*/
void DispFileType()
{
	DWORD bt;
	char *fname = "c:\\windows\\notepad.exe";
	GetBinaryType(fname, &bt);
	
	switch(bt) {
	case SCS_32BIT_BINARY:
		printf("Win32\n");
		break;
	case SCS_DOS_BINARY:
		printf("Dos\n");
		break;
	case SCS_OS216_BINARY:
		printf("OS2 16bit\n");
		break;
	case SCS_PIF_BINARY:
		printf("PIF\n");
		break;
	case SCS_POSIX_BINARY:
		printf("POSIX\n");
		break;
	case SCS_WOW_BINARY:
		printf("Win16\n");
		break;
	}
}

VBのサンプル:

' c:\windows\notepad.exeの種類を表示
Private Sub DispFileType()

	Dim BinType As Long
	Dim lResult As Long

	'種類を取得
	lResult = GetBinaryType("c:\windows\notepad.exe", BinType)

	'エラーなら、終了
	If lResult = 0 Then
		MsgBox "Error:" & Err.LastDllError
		Exit Sub
	End If

	'種類の表示
	Select Case BinType
		Case SCS_32BIT_BINARY
			MsgBox "Win32"

		Case SCS_DOS_BINARY
			MsgBox "Dos"

		Case SCS_OS216_BINARY
			MsgBox "OS2 16bit"

		Case SCS_PIF_BINARY
			MsgBox "PIF"

		Case SCS_POSIX_BINARY
			MsgBox "POSIX"

		Case SCS_WOW_BINARY
			MsgBox "Win16"
	End Select

End Sub
(original text:1998/12/25 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。