بسم الله الرحمن الرحيم
هل فكرت يوماً بتشغيل نافذة MS-DOS من خلال فيجوال بيسك؟ إن كان جوابك لا فانسخ الكود التالي في فيجوال بيسك.
البرنامج المرفق يشغل نافذة دوس و يطلب منك أدخال نص ثم يخرج النص لك في نفس النافذة.
أترككم مع الشيفرة التالية التي يجب أن تضعها في المديول ولا تحتاج أن تنشئ نافذة للبرنامج :
'To use this example:
'Add a BAS Module and Remove the Form
'Put the code into the BAS Module
'Make sure the Project's Startup Object is set to 'Sub Main'
'(you can change this by going to Project->Project Properties->
'General Tab->Startup Object)
Option Explicit
Private Declare Function AllocConsole Lib "kernel32" () As Long
Private Declare Function FreeConsole Lib "kernel32" () As Long
Private Declare Function GetStdHandle Lib "kernel32" _
(ByVal nStdHandle As Long) As Long
Private Declare Function ReadConsole Lib "kernel32" Alias "ReadConsoleA" _
(ByVal hConsoleInput As Long, ByVal lpBuffer As String, ByVal _
nNumberOfCharsToRead As Long, lpNumberOfCharsRead As Long, lpReserved As Any) As Long
Private Declare Function SetConsoleTextAttribute Lib "kernel32" _
(ByVal hConsoleOutput As Long, ByVal wAttributes As Long) As Long
Private Declare Function SetConsoleTitle Lib "kernel32" Alias "SetConsoleTitleA" _
(ByVal lpConsoleTitle As String) As Long
Private Declare Function WriteConsole Lib "kernel32" Alias "WriteConsoleA" _
(ByVal hConsoleOutput As Long, ByVal lpBuffer As Any, ByVal nNumberOfCharsToWrite As _
Long, lpNumberOfCharsWritten As Long, lpReserved As Any) As Long
Private Const STD_INPUT_HANDLE = -10&
Private Const STD_OUTPUT_HANDLE = -11&
Private Const STD_ERROR_HANDLE = -12&
Private Const FOREGROUND_RED = &H4
Private Const FOREGROUND_GREEN = &H2
Private Const FOREGROUND_BLUE = &H1
Private Const FOREGROUND_INTENSITY = &H8
Private Const BACKGROUND_RED = &H40
Private Const BACKGROUND_GREEN = &H20
Private Const BACKGROUND_BLUE = &H10
Private Const BACKGROUND_INTENSITY = &H80
Private Const ENABLE_LINE_INPUT = &H2
Private Const ENABLE_ECHO_INPUT = &H4
Private Const ENABLE_MOUSE_INPUT = &H10
Private Const ENABLE_PROCESSED_INPUT = &H1
Private Const ENABLE_WINDOW_INPUT = &H8
Private Const ENABLE_PROCESSED_OUTPUT = &H1
Private Const ENABLE_WRAP_AT_EOL_OUTPUT = &H2
Private hCmdIn As Long
Private hCmdOut As Long
Private hCmdError As Long
Sub Main()
Dim CmdIn As String * 256
Dim CmdOUT As String
'Open New Console Window
AllocConsole
'Set te Console Title
SetConsoleTitle "My Cmd Console"
'Get The Console Handler
hCmdIn = GetStdHandle(STD_INPUT_HANDLE)
hCmdOut = GetStdHandle(STD_OUTPUT_HANDLE)
hCmdError = GetStdHandle(STD_ERROR_HANDLE)
'Set The Console Color Attribute
SetConsoleTextAttribute hCmdOut, FOREGROUND_GREEN Or FOREGROUND_INTENSITY
CmdOUT = "Command Line OutPut" & vbCrLf
'Write The Output on CommandLine Console
WriteConsole hCmdOut, CmdOUT, Len(CmdOUT), vbNull, vbNull
CmdOUT = "Keyb Input: "
'Write The Output on CommandLine Console
WriteConsole hCmdOut, CmdOUT, Len(CmdOUT), vbNull, vbNull
'Read The Input on CommandLine Console
Call ReadConsole(hCmdIn, CmdIn, Len(CmdIn), vbNull, vbNull)
CmdOUT = "You Are Type: " & Left$(CmdIn, InStr(CmdIn, Chr$(0)) - 3) & vbCrLf
'Write The Output on CommandLine Console
WriteConsole hCmdOut, CmdOUT, Len(CmdOUT), vbNull, vbNull
'Read The Input on CommandLine Console
Call ReadConsole(hCmdIn, CmdIn, Len(CmdIn), vbNull, vbNull)
'Close Console Window
FreeConsole
End Sub