Rubrik: System/Windows · Konsole | VB-Versionen: VB4, VB5, VB6 | 11.01.01 |
Konsolen Aufruf mit Wertuebergabe Sicherlich fragen sich jetzt viele von Ihnen: Konsolenaufruf - was ist das?Das hier vorgestellte Beispiel zeigt, wie man gezielt von einer VB-Anwend... | ||
Autor: Heinz Prelle | Bewertung: | Views: 22.269 |
www.visual-basic5.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Sicherlich fragen sich jetzt viele von Ihnen: Konsolenaufruf - was ist das?
Das hier vorgestellte Beispiel zeigt, wie man gezielt von einer VB-Anwendung aus, das MS-DOS Eingabefenster steuern kann. Es wird hier z.B. die Eingabe einer Zahl zwischen 1 und 10 verlangt. Nachdem der Anwender die Eingabe mit Enter abgeschlossen hat, wird geprüft, ob es sich um eine zulässige Eingabe handelt. Je nach Ergebnis wird ein entsprechender Text in das Fenster "geschrieben". Das Eingabefenster wird dann programmgesteuert wieder geschlossen.
' Beispiel : Konsolenaufruf Private Declare Function SetConsoleMode Lib "kernel32" ( _ ByVal hConsoleOutput As Long, _ dwMode As Long) 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 AllocConsole Lib "kernel32" () 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 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 Private Sub Command1_Click() Unload Me End Sub Private Sub Command2_Click() Dim strAusgabe As String Dim lngHEingabe As Long Dim lngHAusgabe As Long Dim lngHFehler As Long Dim strEingabeCount As String * 255 AllocConsole lngHEingabe = GetStdHandle(STD_INPUT_HANDLE) lngHAusgabe = GetStdHandle(STD_OUTPUT_HANDLE) lngHFehler = GetStdHandle(STD_ERROR_HANDLE) SetConsoleMode lngHEingabe, ENABLE_ECHO_INPUT strAusgabe = "Geben Sie eine Zahl zwischen 1 und 10 ein." _ & vbCrLf WriteConsole lngHAusgabe, strAusgabe, Len(strAusgabe), _ vbNull, vbNull ReadConsole lngHEingabe, strEingabeCount, _ Len(strEingabeCount), vbNull, vbNull strEingabeCount = funcTrim(strEingabeCount) If IsNumeric(strEingabeCount) Then If CLng(strEingabeCount) < 1 Or _ CLng(strEingabeCount) > 10 Then strAusgabe = "Sie muessen den Anweisungen folgen..." Else strAusgabe = "Ihre Eingabe war : " & strEingabeCount End If Else strAusgabe = "Sie muessen den Anweisungen folgen..." End If strAusgabe = strAusgabe & vbCrLf WriteConsole lngHAusgabe, strAusgabe, Len(strAusgabe), _ vbNull, vbNull strAusgabe = "Druecken Sie ENTER um zu Beenden." & vbCrLf WriteConsole lngHAusgabe, strAusgabe, Len(strAusgabe), _ vbNull, vbNull ReadConsole lngHEingabe, strEingabeCount, _ Len(strEingabeCount), vbNull, vbNull strEingabeCount = funcTrim(strEingabeCount) FreeConsole End Sub Public Function funcTrim(ByVal strEingabeString As String) _ As String Dim strAnt As String Dim strZeichen As String Dim lngLaenge As Long Dim lngStr As Long strAnt = strEingabeString lngLaenge = Len(strEingabeString) If lngLaenge > 0 Then For lngStr = 1 To lngLaenge strZeichen = Mid(strAnt, lngStr, 1) If Asc(strZeichen) > 32 Then Exit For Next strAnt = Mid(strAnt, lngStr) lngLaenge = Len(strAnt) If lngLaenge > 0 Then For lngStr = lngLaenge To 1 Step -1 strZeichen = Mid(strAnt, lngStr, 1) If Asc(strZeichen) > 32 Then Exit For Next End If strAnt = Left$(strAnt, lngStr) End If funcTrim = strAnt End Function
Am besten Sie schauen sich das kleine Anwendungsbeispiel an und probieren es einmal aus.