vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 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: VB4, VB5, VB611.11.02
Verwenden der Eingabeauforderung

Eine Klasse, mit der sich die Eingabeaufforderung aus der VB-Anwendung heraus verwenden lässt (Lesen und Schreiben!)

Autor:   Stefan WanitzekBewertung:     [ Jetzt bewerten ]Views:  19.641 
www.thundercloud.infoSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Mittels API kann VB auch mit der Windows Konsole (Eingabeaufforderung) umgehen. In diesem Tipp wird Ihnen gezeigt, wie Sie in einer Konsole Text ausgeben und eingeben können.

Den gesamten Code verpacken wir in eine Klasse, damit man später leichter mit der Konsole umgehen kann. Fügen Sie dem Projekt ein neues Klassenmodul hinzu und benennen es clsConsole. Fügen Sie anschließend nachfolgende Deklarationen in den Allgemein-Teil des Klassenmoduls ein:

' Benötigte API-Deklarationen
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 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 Declare Function SetConsoleMode Lib "kernel32" ( _
  ByVal hConsoleOutput As Long, _
  dwMode 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 SetConsoleTitle Lib "kernel32" _
  Alias "SetConsoleTitleA" ( _
  ByVal lpConsoleTitle As String) As Long
 
' Konstanten
Private Const STD_INPUT_HANDLE = -10&
Private Const STD_OUTPUT_HANDLE = -11&
Private Const STD_ERROR_HANDLE = -12&
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
 
' Variablen für den Consolen-Zugriff
Private lHInput As Long
Private lHOutPut As Long
Private lHErr As Long

Kurze Erläuterungen zu den API-Funktionen:

AllocConsole - Erstellt die Konsole
FreeConsole - Schließt die Konsole wieder
GetStdHandel - Handle der Konsole bekommen
WriteConsole - In die Konsole schreiben
SetConsoleMode - Konsolen Modus setzen (damit z.B auch eine Eingabe erlaubt ist)
ReadConsole - Aus der Konsole lesen
SetConsoleTitel - Fenster Titel der Konsole setzen

Unsere Klasse übernimmt nun die Steuerung der Konsole, so dass man sich später nicht mehr mit den einzelnen Parametern herumschlagen muss:

' Konsole erstellen und anzeigen
Public Sub Show(Optional sConsoleCaption As String)
  AllocConsole
  lHInput = GetStdHandle(STD_INPUT_HANDLE)
  lHOutPut = GetStdHandle(STD_OUTPUT_HANDLE)
  lHErr = GetStdHandle(STD_ERROR_HANDLE)
  SetConsoleMode lHInput, ENABLE_ECHO_INPUT
  SetConsoleTitle sConsoleCaption
End Sub
 
' Konsole schließen
Public Sub Shutdown()
  Class_Terminate
End Sub
' Titel nachträglich setzen
Public Sub SetTitel(sConsoleTitle As String)
  SetConsoleTitle sConsoleTitle
End Sub
' In Konsole schreiben
Public Sub WriteText(sText As String)
  WriteConsole lHOutPut, sText, Len(sText), _
    Len(sText), vbNull
End Sub
' Von Konsole lesen
Public Function ReadText() As String
  Dim sUserInput As String * 256
 
  On Error Resume Next
  ReadConsole lHInput, sUserInput, Len(sUserInput), _
    vbNull, vbNull
 
  ReadText = Left$(sUserInput, _
    InStr(sUserInput, Chr$(0)) - 3)
End Function
' Klasse wird gelöscht
Private Sub Class_Terminate()
  FreeConsole
End Sub

Das war schon alles

Nachfolgend ein Beispiel, wie man die Klasse verwenden kann:

' Klasse instanzieren
Dim clsConsole As New clsConsole
 
With clsConsole
  ' Konsole öffnen
  .Show "Konsolen Beispiel"
 
  ' Text in Konsole schreiben
  .WriteText "Bitte beliebigen Text eingeben oder 'exit' " & _
    "um das Fenster zu schliessen:" & vbNewLine
 
  ' Eingabe einlesen
  Do
    sName = .ReadText
    If sName = "exit" Then
      ' Eingabeaufforderung schließen
      .Shutdown
      Exit Do
    End If
 
    ' Text rausschreiben
    .WriteText "Ihre Eingabe war: " & sName & vbNewLine
  Loop
End With
 
' Klassen-Objekt zerstören
Set clsConsole = Nothing

Viel Spaß noch mit der jetzt fertigen Konsolen Klasse
 

Dieser Tipp wurde bereits 19.641 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