typedef struct _CHAR_INFO { union { WCHAR UnicodeChar; CHAR AsciiChar; } Char; WORD Attributes; } CHAR_INFO, *PCHAR_INFO;
<MarshalAs(UnmanagedType.LPArray)> _ Public lpBuffer(20, 20) As CHAR_INFO Sub Main() Dim dwBufferSize As COORD dwBufferSize.X = 21 dwBufferSize.Y = 21 Dim dwBufferCoord As COORD dwBufferCoord.X = 0 dwBufferCoord.Y = 0 Dim lpReadRegion As SMALL_RECT lpReadRegion.Left = 0 lpReadRegion.Top = 0 lpReadRegion.Right = 50 lpReadRegion.Bottom = 50 Dim hConsole As IntPtr = API_GetStdHandle(STD_OUTPUT_HANDLE) For i As Integer = 0 To 10 Console.WriteLine("Line number " & i) Next For i As Integer = 0 To 20 For j As Integer = 0 To 20 lpBuffer(i, j) = New CHAR_INFO Next Next Dim res = API_ReadConsoleOutput(hConsole, lpBuffer, dwBufferSize, dwBufferCoord, lpReadRegion) End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questiongoogle est mon ami quand tu cherches quelque chose demande lui clairement
google est mon ami quand tu cherches quelque chose demande lui clairement
Module Module1 Public Const STD_INPUT_HANDLE As Integer = -10 Public Const STD_OUTPUT_HANDLE As Integer = -11 Public Const STD_ERROR_HANDLE As Integer = -12 Public Enum ConsoleStandardDevice Input = STD_INPUT_HANDLE Output = STD_OUTPUT_HANDLE Errorc = STD_ERROR_HANDLE End Enum <DllImport( _ "kernel32.dll", EntryPoint:="GetStdHandle", SetLastError:=True)> _ Private Function API_GetStdHandle(<MarshalAs(UnmanagedType.I4)> ByVal nStdHandle As Integer) As IntPtr End Function ' Normalement lpBuffer est un pointeur qui cible le 1er élément d'un ' tableau bi-dimensionnel de structures CHAR_INFO. Je pense que c'est ' bon mais pas certain. <DllImport( _ "kernel32.dll", EntryPoint:="ReadConsoleOutputA", SetLastError:=True)> _ Private Function API_ReadConsoleOutput( _ ByVal hConsoleOutput As IntPtr, _ ByRef lpBuffer As CHAR_INFO, _ ByVal dwBufferSize As COORD, _ ByVal dwBufferCoord As COORD, _ ByRef lpReadRegion As SMALL_RECT) As Boolean End Function <StructLayout(LayoutKind.Explicit, CharSet:=CharSet.Auto)> _ Private Structure CHAR_TYPE <FieldOffset(0)> _ Public UnicodeChar As Short <FieldOffset(0)> _ Public AsciiChar As Byte End Structure <StructLayout(LayoutKind.Sequential)> _ Private Structure CHAR_INFO Public charData As CHAR_TYPE <MarshalAs(UnmanagedType.U2)> Public attributes As Short End Structure <StructLayout(LayoutKind.Sequential)> _ Private Structure COORD <MarshalAs(UnmanagedType.I2)> Public X As Short <MarshalAs(UnmanagedType.I2)> Public Y As Short End Structure <StructLayout(LayoutKind.Sequential)> _ Private Structure SMALL_RECT <MarshalAs(UnmanagedType.I2)> Public Left As Short <MarshalAs(UnmanagedType.I2)> Public Top As Short <MarshalAs(UnmanagedType.I2)> Public Right As Short <MarshalAs(UnmanagedType.I2)> Public Bottom As Short End Structure Sub Main() Dim lpBuffer(51) As CHAR_INFO Dim dwBufferSize As COORD dwBufferSize.X = 13 dwBufferSize.Y = 4 Dim dwBufferCoord As COORD dwBufferCoord.X = 0 dwBufferCoord.Y = 0 Dim lpReadRegion As SMALL_RECT lpReadRegion.Left = 0 lpReadRegion.Top = 0 lpReadRegion.Right = 15 lpReadRegion.Bottom = 4 Dim hConsole As IntPtr = API_GetStdHandle(ConsoleStandardDevice.Output) For i As Integer = 1 To 4 Console.WriteLine("Line number " & i) Next Try Dim res = API_ReadConsoleOutput(hConsole, lpBuffer(0), dwBufferSize, dwBufferCoord, lpReadRegion) For i As Integer = 0 To lpBuffer.GetUpperBound(0) Console.WriteLine("{0} | {1}", lpBuffer(i).charData.AsciiChar, lpBuffer(i).attributes) Next Catch ex As Exception Console.WriteLine(ex.Message) End Try Console.ReadKey(True) End Sub End Module
Sub Main() Dim lpBuffer(12, 3) As CHAR_INFO Dim dwBufferSize As COORD dwBufferSize.X = 13 dwBufferSize.Y = 4 Dim dwBufferCoord As COORD dwBufferCoord.X = 0 dwBufferCoord.Y = 0 Dim lpReadRegion As SMALL_RECT lpReadRegion.Left = 0 lpReadRegion.Top = 0 lpReadRegion.Right = 15 lpReadRegion.Bottom = 4 Dim hConsole As IntPtr = API_GetStdHandle(ConsoleStandardDevice.Output) For i As Integer = 1 To 4 Console.WriteLine("Line number " & i) Next Try Dim res = API_ReadConsoleOutput(hConsole, lpBuffer(0, 0), dwBufferSize, dwBufferCoord, lpReadRegion) For i As Integer = 0 To lpBuffer.GetUpperBound(0) For j As Integer = 0 To lpBuffer.GetUpperBound(1) Console.WriteLine("{0} | {1}", Chr(lpBuffer(i, j).charData.AsciiChar), lpBuffer(i, j).attributes) Next Next Catch ex As Exception Console.WriteLine(ex.Message) End Try Console.ReadKey(True) End Sub
Dim lpBuffer(165, 79) As CHAR_INFO Dim dwBufferSize As COORD dwBufferSize.X = 80 dwBufferSize.Y = 166 Dim lpReadRegion As SMALL_RECT lpReadRegion.Left = 0 lpReadRegion.Top = 0 lpReadRegion.Right = 80 lpReadRegion.Bottom = 300