コンソールウィンドウの操作(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