Patrick Burke wrote:
Hi I'm tring to WriteConsoleInput to a Console app after I use
AttachConsole. I don't know where to get the HANDLE definition -- I
tried "using System;,System.Runtime.InteropServices,
System.Diagnostics,,using System.IO, Microsoft.Win32,
Microsoft.Internal" but I cannot find the definition of HANDLE, "The
type or namespace name 'HANDLE' could not be found (are you missing a
using directive or an assembly reference?)" I also can't find the
definitions of GENERIC_READ and OPEN_EXISTING, for example.
I need the definition of HANDLE to do something like this:
HANDLE rHnd;
rHnd = GetStdHandle(STD_INPUT_HANDLE);
and then WriteConsoleInput(rHnd, ...);
I would just like to write some characters to the console input
buffer, but this is proving difficult, if you have any direction,
definitions, examples, et cetera, I would appreciate it very much.
uint or int works fine.
Code below.
Arne
=============================================
public class MyConsole : IDisposable
{
private const uint STD_INPUT_HANDLE = 0xfffffff6;
private const uint STD_OUTPUT_HANDLE = 0xfffffff5;
private const uint STD_ERROR_HANDLE = 0xfffffff4;
private const uint ATTACH_PARENT_PROCESS = 0xffffffff;
[DllImport("kernel32.dll")]
public static extern bool AttachConsole(uint dwProcessId);
[DllImport("kernel32.dll")]
public static extern bool AllocConsole();
[DllImport("kernel32.dll")]
public static extern bool FreeConsole();
[DllImport("kernel32.dll")]
public static extern int GetStdHandle(uint nStdHandle);
[DllImport("kernel32.dll")]
public static extern bool WriteConsole(int hConsoleOutput,
string lpBuffer,
int nNumberOfCharsToWrite,
ref int
lpNumberOfCharsWritten,
int lpReserved);
[DllImport("kernel32.dll")]
public static extern bool ReadConsole(int hConsoleInput,
StringBuilder lpBuffer,
int nNumberOfCharsToRead,
ref int lpNumberOfCharsRead,
int lpReserved);
private int stdin;
private int stdout;
public MyConsole()
{
AllocConsole();
stdin = GetStdHandle(STD_INPUT_HANDLE);
stdout = GetStdHandle(STD_OUTPUT_HANDLE);
}
public void WriteLine(string s)
{
int len = 0;
WriteConsole(stdout, s + "\r\n", s.Length + 2, ref len, 0);
}
public string ReadLine()
{
int len = 0;
StringBuilder sb = new StringBuilder();
ReadConsole(stdin, sb, 256, ref len, 0);
return sb.ToString(0, sb.Length - 2);
}
public void Dispose()
{
FreeConsole();
}
}