コンソールウィンドウの操作(32bit○、64bit○) <TOP>
AllocConsole 呼び出し側プロセスに新しいコンソールを割り当てる
FreeConsole 呼び出し側プロセスをそのコンソールから切り離す
CloseHandle オープンされているオブジェクトハンドルをクローズ
GetStdHandle 標準入力デバイス、標準出力デバイス、標準エラーデバイスのいずれかのハンドルを返す
WriteConsole コンソールスクリーンバッファの現在のカーソル位置に文字列を挿入
ReadConsole コンソール入力バッファから文字入力を読み取り、読み取った文字をバッファから削除
SetConsoleTextAttribute
スクリーンバッファに書き込む文字、エコーする文字の前景(テキスト)色属性と背景色属性を設定
SetConsoleTitle コンソールウィンドウのタイトル文字列を設定
'================================================================ '= コンソールウィンドウの操作 '= (AllocConsole3.bas)http://www.jazzradio.com/smoothuptempo '================================================================ #include "Windows.bi" #define FOREGROUND_BLUE &H1 '前景色(青) #define FOREGROUND_GREEN &H2 '前景色(緑) #define FOREGROUND_RED &H4 '前景色(赤) #define FOREGROUND_INTENSITY &H8 '前景色(強調) #define FOREGROUND_SEARCH &H10 ' #define BACKGROUND_BLUE &H10 '背景色(青) #define BACKGROUND_GREEN &H20 '背景色(緑) #define BACKGROUND_RED &H40 '背景色(赤) #define BACKGROUND_INTENSITY &H80 '背景色(強調) #define BACKGROUND_SEARCH &H20 ' #define ENABLE_LINE_INPUT &H2 #define ENABLE_ECHO_INPUT &H4 #define ENABLE_MOUSE_INPUT &H10 #define ENABLE_PROCESSED_INPUT &H1 #define ENABLE_WINDOW_INPUT &H8 #define ENABLE_PROCESSED_OUTPUT &H1 #define ENABLE_WRAP_AT_EOL_OUTPUT &H2 #define STD_OUTPUT_HANDLE (-11) #define STD_INPUT_HANDLE (-10) #define STD_ERROR_HANDLE (-12) #define INVALID_HANDLE_VALUE (-1) ' 呼び出し側プロセスに新しいコンソールを割り当てる Declare Function Api_AllocConsole& Lib "kernel32" Alias "AllocConsole" () ' 呼び出し側プロセスをそのコンソールから切り離す Declare Function Api_FreeConsole& Lib "kernel32" Alias "FreeConsole" () ' オープンされているオブジェクトハンドルをクローズ Declare Function Api_CloseHandle& Lib "Kernel32" Alias "CloseHandle" (ByVal hObject&) ' 標準入力デバイス、標準出力デバイス、標準エラーデバイスのいずれかのハンドルを返す Declare Function Api_GetStdHandle& Lib "kernel32" Alias "GetStdHandle" (ByVal nStdHandle&) ' コンソールスクリーンバッファの現在のカーソル位置に文字列を挿入 Declare Function Api_WriteConsole& Lib "kernel32" Alias "WriteConsoleA" (ByVal hConsoleOutput&, lpBuffer As Any, ByVal nNumberOfCharsToWrite&, lpNumberOfCharsWritten&, lpReserved As Any) ' コンソール入力バッファから文字入力を読み取り、読み取った文字をバッファから削除 Declare Function Api_ReadConsole& Lib "kernel32" Alias "ReadConsoleA" (ByVal hConsoleInput&, ByVal lpBuffer$, ByVal nNumberOfCharsToRead&, lpNumberOfCharsRead&, lpReserved As Any) ' スクリーンバッファに書き込む文字、エコーする文字の前景(テキスト)色属性と背景色属性を設定 Declare Function Api_SetConsoleTextAttribute& Lib "kernel32" Alias "SetConsoleTextAttribute" (ByVal hConsoleOutput&, ByVal wAttributes&) ' コンソールウィンドウのタイトル文字列を設定 Declare Function Api_SetConsoleTitle& Lib "kernel32" Alias "SetConsoleTitleA" (ByVal lpConsoleTitle$) Var Shared hCmdIn As Long Var Shared hCmdOut As Long Var Shared hCmdError As Long Var Shared MainForm As Object Var Shared Button1 As Object MainForm.Attach GetDlgItem("MainForm") Button1.Attach GetDlgItem("Button1") : Button1.setFontSize 14 '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var CmdIn As String * 256 Var CmdOUT As String Var Ret As Long 'コンソールウィンドウをオープン Ret = Api_AllocConsole 'コンソールにタイトルを設定 Ret = Api_SetConsoleTitle("My Cmd Console") 'コンソールのハンドルを取得 hCmdIn = Api_GetStdHandle(STD_INPUT_HANDLE) hCmdOut = Api_GetStdHandle(STD_OUTPUT_HANDLE) hCmdError = Api_GetStdHandle(STD_ERROR_HANDLE) '文字列 CmdOUT = "Command Line OutPut" & Chr$(13, 10) '背景色を暗い赤にに、文字列を暗い黄に設定 Ret = Api_SetConsoleTextAttribute(hCmdOut, FOREGROUND_RED Or FOREGROUND_GREEN Or BACKGROUND_RED) 'コンソールに文字列を書き込み Ret = Api_WriteConsole(hCmdOut, CmdOUT, Len(CmdOUT), 1, 1) '背景色を赤(FOREGROUND_INTENSITY)に、文字列を黄(BACKGROUND_INTENSITY)に設定 Ret = Api_SetConsoleTextAttribute(hCmdOut, FOREGROUND_RED Or FOREGROUND_GREEN Or FOREGROUND_INTENSITY Or BACKGROUND_RED Or BACKGROUND_INTENSITY) 'コンソールに文字列を書き込み Ret = Api_WriteConsole(hCmdOut, CmdOUT, Len(CmdOUT), 1, 1) '文字列 CmdOUT = "Keyb Input: " '背景色を黒に、文字列を薄緑に設定 Ret = Api_SetConsoleTextAttribute(hCmdOut, FOREGROUND_BLUE Or FOREGROUND_GREEN Or FOREGROUND_INTENSITY) 'コンソールに文字列を書き込み Ret = Api_WriteConsole(hCmdOut, CmdOUT, Len(CmdOUT), 1, 1) '背景色を暗い緑に、文字列を黄に設定 Ret = Api_SetConsoleTextAttribute(hCmdOut, FOREGROUND_RED Or FOREGROUND_GREEN Or FOREGROUND_INTENSITY OR BACKGROUND_GREEN) 'コンソールから文字列を読み込み Ret = Api_ReadConsole(hCmdIn, CmdIn, Len(CmdIn), 1, 1) CmdOUT = "You Are Type: " & Left$(CmdIn, InStr(CmdIn, Chr$(0)) - 3) & Chr$(13, 10) '背景色を暗い緑に、文字列を黄に設定 Ret = Api_SetConsoleTextAttribute(hCmdOut, FOREGROUND_RED Or FOREGROUND_GREEN Or FOREGROUND_INTENSITY) 'コンソールに文字列を書き込み Ret = Api_WriteConsole(hCmdOut, CmdOUT, Len(CmdOUT), 1, 1) '文字列 CmdOUT = "Hit Any Key " '背景色を黒に、文字列を緑に設定 Ret = Api_SetConsoleTextAttribute(hCmdOut, FOREGROUND_GREEN Or FOREGROUND_INTENSITY) 'コンソールに文字列を書き込み Ret = Api_WriteConsole(hCmdOut, CmdOUT, Len(CmdOUT), 1, 1) 'コンソールから文字列を読み込み Ret = Api_ReadConsole(hCmdIn, CmdIn, Len(CmdIn), 1, 1) 'コンソールウィンドウを閉じる Ret = Api_FreeConsole MainForm.SetFocus End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End