BOOL AllocConsole();
Declare Function AllocConsole Lib "kernel32" () As Long
割り当てられたコンソールのバッファの大きさやウィンドウの大きさなどの属性は、コンソールプロセス作成時にCreateProcess関数に与えられたSTARTUPINFO構造体の情報に従う。
新規に割り当てたコンソールに対する入出力をprintfなどの標準Cライブラリ関数で行った時に誤動作を起こす場合は、WriteFile関数などを用いなければならない。
GUIプロセスにコンソールを割り当てた場合、デフォルトの状態ではCTRL+Cによってプロセスが終了してしまうので、注意しなければならない。CTRL+Cを無効にするには、SetConsoleCtrlHandler関数などを使用する。
戻り値は、関数の実行に成功したか否かを表す真偽値である。
主なエラーは、以下の通り。
| ERROR_INVALID_FUNCTION | すでにコンソールは割り当てられている。 |
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();
}
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