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: Dieser Tipp wurde bereits 21.110 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
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. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 TOP! Unser Nr. 1 Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. |
||||||||||||||||
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. |