在WinForm下的專案可以使用 Console.WriteLine 輸出訊息到Console上
- 開啟Console視窗AllocConsole
- 確認Console視窗是否開啟GetConsoleWindow
[DllImport("kernel32.dll")]
static extern bool AllocConsole();
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
private void button1_Click(object sender, EventArgs e)
{
if(GetConsoleWindow() == IntPtr.Zero)
{
AllocConsole(); // 開啟 Console
Console.WriteLine("Console 已啟動");
}
else
{
Console.WriteLine("Hello world");
}
}
讓Console視窗緊貼WinForm
[DllImport("kernel32.dll")]
static extern bool AllocConsole();
// Win32 API
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
IntPtr consoleHandle;
[DllImport("user32.dll")]
static extern bool MoveWindow(
IntPtr hWnd,
int X,
int Y,
int nWidth,
int nHeight,
bool bRepaint);
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
const int SW_HIDE = 0;
const int SW_SHOW = 5;
protected override void OnMove(EventArgs e)
{
base.OnMove(e);
SyncConsole();
}
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
SyncConsole();
}
private void SyncConsole()
{
if (consoleHandle == IntPtr.Zero) return;
if (this.WindowState == FormWindowState.Minimized)
{
ShowWindow(consoleHandle, SW_HIDE);
return;
}
ShowWindow(consoleHandle, SW_SHOW);
int consoleWidth = 500;
int consoleHeight = this.Height;
int x = this.Right;
int y = this.Top;
MoveWindow(
consoleHandle,
x-14,
y,
consoleWidth,
consoleHeight,
true);
}
private void button1_Click(object sender, EventArgs e)
{
if (GetConsoleWindow() == IntPtr.Zero)
{
AllocConsole(); // 開啟 Console
consoleHandle = GetConsoleWindow();
SyncConsole();
Console.WriteLine("Console 已啟動並貼齊 WinForm");
}
else
{
Console.WriteLine("Hello world");
}
}

留言
張貼留言