[DllImport("kernel32.dll")]
static extern bool ReadConsoleOutputCharacter(IntPtr hConsoleOutput,
[Out] StringBuilder lpCharacter, uint nLength, COORD dwReadCoord,
out uint lpNumberOfCharsRead);
None.
None.
Please add some!
[DllImport("Kernel32", SetLastError=true)]
static extern IntPtr GetStdHandle(uint nStdHandle);
[DllImport("Kernel32", SetLastError=true)]
static extern bool ReadConsoleOutputCharacter(IntPtr hConsoleOutput,
[Out] StringBuilder lpCharacter, uint nLength, COORD dwReadCoord,
out uint lpNumberOfCharsRead);
[StructLayout(LayoutKind.Sequential)]
struct COORD
{
public short X;
public short Y;
}
private string ReadALineOfConsoleOutput()
{
IntPtr stdout = GetStdHandle(STD_OUTPUT_HANDLE);
if ( stdout.ToInt32() == INVALID_HANDLE_VALUE )
throw new Win32Exception();
// this assumes the console screen buffer is 80 columns wide.
// You can call GetConsoleScreenBufferInfo() to get its actual dimensions.
uint nLength = 80;
StringBuilder lpCharacter = new StringBuilder((int)nLength);
// read from the first character of the first line (0, 0).
COORD dwReadCoord;
dwReadCoord.X = 0;
dwReadCoord.Y = 0;
uint lpNumberOfCharsRead = 0;
if ( !ReadConsoleOutputCharacter(stdout, lpCharacter, nLength, dwReadCoord, out lpNumberOfCharsRead) )
throw new Win32Exception();
return lpCharacter.ToString();
}
Do you know one? Please contribute it!