FreeConsole コンソールの開放

Cの宣言:

BOOL FreeConsole();

VBの宣言:

Declare Function FreeConsole Lib "kernel32" () As Long

説明:

割り当てられていたコンソールを開放する。開放するコンソールが呼び出し元プロセスのみの所有するコンソールであるならば、コンソールウィンドウはクローズされる。開放するコンソールが他のプロセスと共有されている場合、コンソールウィンドウはクローズされない。

元のコンソールの入出力バッファにアクセスするために取得したハンドルは、FreeConsole後は無効となる。例えば“CONOUT$”をCreateFile関数でオープン後FreeConsoleを実行したならば、たとえ再びコンソールをAllocConsoleで割り当てたとしても、WriteFile関数はERROR_INVALID_HANDLEを返すだろう。

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

Cのサンプル:

void DoAllocCon()
{
	int i;
	DWORD cbWritten;
	HANDLE hFile;
	char buf[1000];

	FreeConsole();
	AllocConsole();

	hFile = CreateFile(
		"CONOUT$",
		GENERIC_WRITE,
		0,
		NULL,
		OPEN_EXISTING,
		FILE_ATTRIBUTE_NORMAL,
		NULL);

	for(i=1; i<=5; i++) {
		wsprintf(buf, "%d ", i);
		WriteFile(hFile, buf, lstrlen(buf), &cbWritten, NULL);

		Sleep(1000);
	}

	CloseHandle(hFile);
	FreeConsole();

}

VBのサンプル:

Private Sub DoAllocCon()
	Dim hFile As Long
	Dim i As Long
	Dim S As String
	Dim WriteNum As Long

	'コンソールの割り当て
	AllocConsole

	'コンソールバッファのオープン
	hFile = CreateFile("CONOUT$", GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0)

	'1秒に1回メッセージを表示
	For i = 1 To 5
		S = "count:" & i & vbCrLf
		WriteFile hFile, S, lstrlen(S), WriteNum, 0
		Sleep 1000
	Next

	'コンソールバッファのクローズ
	CloseHandle hFile

	'コンソールの開放
	FreeConsole

End Sub

(original text:1999/02/02 更新)

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