vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: System/Windows · Konsole   |   VB-Versionen: VB5, VB622.11.05
Konsolenanwendungen leicht gemacht

Hier möchten wir eine Klasse vorstellen, welche die wichtigsten Funktionen zur Erstellung von Konsolenanwendungen kapselt.

Autor:   Gunnar SchmitzBewertung:     [ Jetzt bewerten ]Views:  21.103 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Auch heutzutage treffen wir immer wieder noch auf die guten alten Konsolenanwendungen. Und wenn man dabei in Nostalgie verfällt, wünscht man sich eigentlich selber in VB eine kleine Konsolenanwendung zu schreiben. Mit der Klasse, die wir hier vorstellen wollen, ist dies kein Problem. Sie kapselt die wichtigsten API-Funktionen, um kleine Konsolenanwendungen zu konzipieren.

Fügen Sie Ihrem Projekt ein neues Klassenmodul hinzu und geben Sie folgenden Code ein:

Option Explicit
 
' Benötigte API-Funktionen
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
 
Public Enum ForeGroundTypes
  [FOREGROUND_RED] = &H4
  [FOREGROUND_GREEN] = &H2
  [FOREGROUND_BLUE] = &H1
  [FOREGROUND_INTENSITY] = &H8
End Enum
 
Public Enum BackGroundTypes
  [BACKGROUND_RED] = &H40
  [BACKGROUND_GREEN] = &H20
  [BACKGROUND_BLUE] = &H10
  [BACKGROUND_INTENSITY] = &H80
End Enum
 
' Die benötigten Konstanten
Private Const STD_INPUT_HANDLE = -10&
Private Const STD_OUTPUT_HANDLE = -11&
Private Const STD_ERROR_HANDLE = -12&
 
' Einige Variabeln, welche die Klasse intern benutzt
Private hCmdIn As Long
Private hCmdOut As Long
Private hCmdError As Long
 
Private m_Caption As String
Private m_ForeGroundFlags As ForeGroundTypes
Private m_BackGroundFlags As BackGroundTypes
' --------------------Eigenschaften-------------------------------
Public Property Let Caption(NewCaption As String)
  m_Caption = NewCaption
  SetConsoleTitle m_Caption
End Property
 
Public Property Get Caption() As String
  Caption = m_Caption
End Property
Public Property Let ForeGroundFlags(NewForeGroundFlags As ForeGroundTypes)
  m_ForeGroundFlags = NewForeGroundFlags
  ' Änderungen vornehmen
  SetConsoleTextAttribute hCmdOut, m_ForeGroundFlags Or BackGroundFlags
End Property
 
Public Property Get ForeGroundFlags() As ForeGroundTypes
  ForeGroundFlags = m_ForeGroundFlags
End Property
Public Property Let BackGroundFlags(NewBackGroundFlags As BackGroundTypes)
  m_BackGroundFlags = NewBackGroundFlags
  ' Änderungen vornehmen
  SetConsoleTextAttribute hCmdOut, ForeGroundFlags Or m_BackGroundFlags
End Property
 
Public Property Get BackGroundFlags() As BackGroundTypes
  BackGroundFlags = m_BackGroundFlags
End Property
 ' ------------------------------------------------------------------
Private Sub Class_Initialize()
  m_Caption = "Console"
  m_ForeGroundFlags = FOREGROUND_INTENSITY
End Sub
' ------------------------Funktionen--------------------------------
Public Sub OpenConsole()
  ' Öffnet eine neue Konsole
  AllocConsole
  ' Gibt den Konsolentitel an
  SetConsoleTitle Caption
  ' Gibt das Handle der Konsole zurück
  hCmdIn = GetStdHandle(STD_INPUT_HANDLE)
  hCmdOut = GetStdHandle(STD_OUTPUT_HANDLE)
  hCmdError = GetStdHandle(STD_ERROR_HANDLE)
  ' Setzt die Textattribute d.h. ForeGround und BackGround
  SetConsoleTextAttribute hCmdOut, ForeGroundFlags Or BackGroundFlags
End Sub
Public Sub CloseConsole()
  ' Schließt die Konsole
  FreeConsole
End Sub
Public Sub WriteLn(CmdOut As String)
  ' Schreibt einen String mit Zeilenumbruch auf der Konsole
  CmdOut = CmdOut & vbCrLf
  WriteConsole hCmdOut, CmdOut, Len(CmdOut), vbNull, vbNull
End Sub
Public Sub WirteString(CmdOut As String)
  ' Schreibt einen String auf der Konsole
  WriteConsole hCmdOut, CmdOut, Len(CmdOut), vbNull, vbNull
End Sub
Public Function ReadLn() As String
  ' Liest die Nächste Zeile aus
  Dim CmdIn As String * 256
  Call ReadConsole(hCmdIn, CmdIn, Len(CmdIn), vbNull, vbNull)
  ReadLn = CmdIn
End Function

Nun wollen wir das ganze mal ausprobieren. Fügen Sie dazu Ihrem Projekt ein neues Modul hinzu und geben folgenden Code ein.

Option Explicit
 
Sub Main()
  Dim Console As clsConsole
  Dim sText As String
  Set Console = New clsConsole
 
  ' Titel des Konsolenfensters angeben
  Console.Caption = "Meine Konsolenanwendung"
  ' Textattribute festlegen
  Console.ForeGroundFlags = FOREGROUND_INTENSITY
  ' Konsole öffnen
  Console.OpenConsole
  ' Zeilen ausgeben
  Console.WriteLn "Das ist nur ein Test"
  Console.ForeGroundFlags = FOREGROUND_BLUE
  ' Auf Eingabe warten
  Console.WriteLn "Dein Name Bitte"
  Console.ReadLn
 
  ' Konsole schließen
  Console.CloseConsole
End Sub

Nun noch ein kleiner Hinweis:
Bekommen Sie bitte keinen Schrecken, wenn Sie das Programm in der IDE starten und Windows damit überlastet ist die Konsolenfenster neu zu zeichnen. Dieses Problem tritt in der kompilierten Version nicht auf.
 

Dieser Tipp wurde bereits 21.103 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel