.NETのWindowsアプリケーションでコンソールに文字列を吐く方法はないのでしょうか。コマンドプロンプトから起動されたときにメッセージをコマンドプロンプトに出したいのですが…。無論ですが、コンソールアプリケーションに設定しておけば出力できるのは知っています。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/01/20 16:22:21
  • 終了:--

回答(2件)

id:gaa No.1

gaa回答回数16ベストアンサー獲得回数02005/01/20 18:23:52

Console.WriteLine

でいけたような気がしますが・・・

ちょっと今手元に実例がないので・・・

id:Wakusei
2005/01/20 20:35:13
id:Beth No.2

Beth回答回数94ベストアンサー獲得回数12005/01/22 04:42:07

ポイント50pt

Win32のAttachConsole()を使えば可能です。

(AttachConsole()はWinXP/2003以降でないと使えないので注意が必要。)

C#でのサンプルコードを示します。(Visual Studio 2005 betaを使用)

//

// dotNet GUI Application

// コンソールから起動した場合、コンソールに文字を出力する。

// コンソール以外から起動した場合は、何もしない。

//

using System;

using System.Collections.Generic;

using System.Windows.Forms;

using System.Runtime.InteropServices; // Win32 APIを呼び出すために必要

namespace WindowsApplication1

{

static class Program

{

/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main()

{

if(Win32.AttachConsole(System.UInt32.MaxValue)) { // 自プロセスを親プロセスのコンソールにアタッチする。

System.IO.StreamWriter stdout = new System.IO.StreamWriter(System.Console.OpenStandardOutput());

stdout.AutoFlush = true;

System.Console.SetOut(stdout);

System.Console.WriteLine(”¥nProgram started as GUI program in console.¥n”);

Win32.FreeConsole();

}

Application.EnableVisualStyles();

Application.EnableRTLMirroring();

Application.Run(new Form1());

}

}

public class Win32

{

[DllImport(”kernel32.dll”)]

public static extern Boolean AttachConsole(uint dwProcessId);

[DllImport(”kernel32.dll”)]

public static extern Boolean FreeConsole();

}

}

(1)コンソール(コマンドプロンプト)から起動した場合、親プロセスはcmd.exeになるので

親プロセスのコンソールへのアタッチが成功し、文字が表示される。

これとは逆に、エクスプローラなどから起動した場合は、

親プロセスにはコンソールがないので、アタッチが失敗する。

(2)AttachConsole()の引数に使うATTACH_PARENT_PROCESSはWincon.hで((DWORD)-1)と定義されているので、

System.UInt32.MaxValueになる。(ビットが32ビットすべて立った状態。)

参考記事。

id:Wakusei

そ、そうだ、そうですね。APIを呼べばいいですよね。ありがとうございます、試してみます。

2005/01/22 05:04:26

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません