drasche | J'ai trouvé ceci: le code qui suit est dans un module avec la fonction Main() comme point d'entrée de l'application. Le "problème" est qu'il crée une fenêtre console à lui. Je l'ai trouvé sur une page web écrite en allemand et l'ai remanié un peu, sinon la doc officielle se trouve sur Q171654
Code :
- Option Explicit
- ' Alloue une console
- Private Declare Function AllocConsole Lib "kernel32" () As Long
- ' Libère une console
- Private Declare Function FreeConsole Lib "kernel32" () As Long
- ' stdin/stdout/stderr
- Private Declare Function GetStdHandle Lib "kernel32" _
- (ByVal nStdHandle As Long) 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
- 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
- Const STD_INPUT_HANDLE = -10&
- Const STD_OUTPUT_HANDLE = -11&
- Const STD_ERROR_HANDLE = -12&
- Const FOREGROUND_BLUE = &H1
- Const FOREGROUND_GREEN = &H2
- Const FOREGROUND_RED = &H4
- Const FOREGROUND_INTENSITY = &H8
- Const BACKGROUND_BLUE = &H10
- Const BACKGROUND_GREEN = &H20
- Const BACKGROUND_RED = &H40
- Const BACKGROUND_INTENSITY = &H80
- Const ENABLE_LINE_INPUT = &H2
- Const ENABLE_ECHO_INPUT = &H4
- Const ENABLE_MOUSE_INPUT = &H10
- Const ENABLE_PROCESSED_INPUT = &H1
- Const ENABLE_WINDOW_INPUT = &H8
- Const ENABLE_PROCESSED_OUTPUT = &H1
- Const ENABLE_WRAP_AT_EOL_OUTPUT = &H2
- Private hConsoleIn As Long
- Private hConsoleOut As Long
- Private hConsoleErr As Long
- Public Sub Main()
- ' Création de la console
- CreateConsole
- ' Test de console en in/out
- TestConsole
- ' Fermeture de la console
- UnLoadConsole
- End Sub
- Private Sub CreateConsole()
- ' Création de la console
- Call AllocConsole
- Call SetConsoleTitle("VB Console" )
- ' Récupère les flux (streams) standards
- hConsoleIn = GetStdHandle(STD_INPUT_HANDLE)
- hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE)
- hConsoleErr = GetStdHandle(STD_ERROR_HANDLE)
- End Sub
- Private Sub ConsolePrint(ByRef strText As String)
- ' Envoie strText vers la console (flux de sortie, stdout)
- Call WriteConsole(hConsoleOut, strText, Len(strText), vbNull, vbNull)
- End Sub
- ' Lecture d'une chaîne depuis le flux d'entrées (stdin)
- Private Function ConsoleRead() As String
- Dim strInput As String
- ' Remplissage d'un espace fixe
- strInput = Space$(256)
- ' Lecture de la console
- Call ReadConsole(hConsoleIn, strInput, Len(strInput), _
- vbNull, vbNull)
- ' Renvoi des données pertinentes
- ConsoleRead = Left$(strInput, InStr(strInput, Chr$(13)) - 1)
- End Function
- Private Sub UnLoadConsole()
- ' Destruction de la console
- Call FreeConsole
- End Sub
- ' Test de la console
- Private Sub TestConsole()
- Dim strUserInput As String
- ' Définition du mode texte
- Call SetConsoleTextAttribute(hConsoleOut, FOREGROUND_RED Or _
- FOREGROUND_GREEN Or _
- FOREGROUND_BLUE Or _
- FOREGROUND_INTENSITY Or _
- BACKGROUND_BLUE)
- ' Présentation de l'application
- Call ConsolePrint(App.Title & vbCrLf)
- ' Modification de l'attribut texte
- Call SetConsoleTextAttribute(hConsoleOut, FOREGROUND_RED Or _
- FOREGROUND_GREEN Or _
- FOREGROUND_BLUE)
- ' Demande d'info
- Call ConsolePrint("Veuillez entrer votre nom: " )
- ' Lecture d'une donnée sur le flux d'entrées standard (stdin)
- strUserInput = ConsoleRead()
- ' Traitement de la donnée par renvoi sur le flux de sortie (stdout)
- If Not strUserInput = vbNullString Then
- Call ConsolePrint("Bonjour, " & strUserInput & "!" & vbCrLf)
- Else
- Call ConsolePrint("Bonjour, anonyme!" & vbCrLf)
- End If
- ' Demande de frappe d'une touche
- Call ConsolePrint("Veuillez appuyer sur une touche pour fermer l'application" )
- ' Lecture de données sur le flux d'entrées standard (stdin)
- Call ConsoleRead
- End Sub
|
|