You are currently offline, waiting for your internet to reconnect

How To Attach a Console Window to Your Visual Basic Program

This article was previously published under Q171654
This article demonstrates attaching a console window to your Visual Basicapplication, writing to it, and running another application in the consolewindow.
If a Visual Basic application is started from a console application, theoperating system automatically detaches it from the console, preventing theVisual Basic application from interacting with it. This article does notprovide a method to prevent this from happening, but does demonstratecreating a new console window that your application can interact with. Italso demonstrates running a console application (batch file, in this case)from Visual Basic, which utilizes the created console.

WARNING: ANY USE BY YOU OF THE CODE PROVIDED IN THIS ARTICLE IS AT YOUR OWNRISK. Microsoft provides this code "as is" without warranty of any kind,either express or implied, including but not limited to the impliedwarranties of merchantability and/or fitness for a particular purpose.

Step-by-Step Example

  1. Use Notepad to create the following batch file:

    DIR /W

    and save it as C:\TEST.BAT
  2. In Visual Basic, create a new project with a form and a module.
  3. Type the following API declarations in the module:
       Option Explicit   Declare Function AllocConsole Lib "kernel32" () As Long   Declare Function FreeConsole Lib "kernel32" () As Long   Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) _           As Long   Declare Function GetStdHandle Lib "kernel32" (ByVal _           nStdHandle As Long) As Long   Declare Function WriteConsole Lib "kernel32" Alias "WriteConsoleA" _           (ByVal hConsoleOutput As Long, lpBuffer As Any, ByVal _           nNumberOfCharsToWrite As Long, lpNumberOfCharsWritten As Long, _           lpReserved As Any) As Long   Public Const STD_OUTPUT_HANDLE = -11&						
  4. Add a CommandButton to the form and enter the following code:
       Dim hConsole As Long   Private Sub Command1_Click()   Dim Result As Long, sOut As String, cWritten As Long     sOut = "Hi There" & vbCrLf     Result = WriteConsole(hConsole, ByVal sOut, Len(sOut), cWritten, _                           ByVal 0&)     Shell "C:\TEST.BAT"   End Sub   Private Sub Form_Load()     If AllocConsole() Then       hConsole = GetStdHandle(STD_OUTPUT_HANDLE)       If hConsole = 0 Then MsgBox "Couldn't allocate STDOUT"     Else       MsgBox "Couldn't allocate console"     End If   End Sub   Private Sub Form_Unload(Cancel As Integer)     CloseHandle hConsole     FreeConsole   End Sub						
  5. Run the application. A blank console window will appear.
  6. Click the CommandButton. Both the text in sOut and the output from the batch file will appear in the console.
  7. Close the form. The console window will terminate.
  1. If you run another application in the console, it will run asynchronously with your Visual Basic application. Output from the two applications can become interspersed.
  2. If the console application hasn't terminated prior to your Visual Basic application closing, the console window will remain open.
  3. If you close the console window, the Visual Basic EXE will terminate. If you are in the Visual Basic development environment (IDE), closing the console window will terminate the IDE and it may hang the console window. Use the Task Manager to terminate the task.
Microsoft Windows SDK.
kbVBp500 kbVBp600 kbVBp kbdsd kbDSupport kbVBp400 kbAPI

Article ID: 171654 - Last Review: 06/29/2004 23:26:00 - Revision: 4.1

  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Visual Basic 5.0 Control Creation Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 4.0 32-Bit Enterprise Edition
  • kbhowto KB171654