人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: Wakusei
●カテゴリ:コンピュータ
✍キーワード:.NET Windows アプリケーション コマンドプロンプト メッセージ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● gaa
●0ポイント

http://msdn.microsoft.com/library/default.asp?url=/library/e...

Console.WriteLine

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

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

◎質問者からの返答

無理です。詳しくはConsoleクラスの説明をご覧ください。

http://msdn.microsoft.com/library/default.asp?url=/library/e...

http://www.microsoft.com/japan/msdn/library/default.asp?url=...


2 ● Beth
●50ポイント

http://msdn.microsoft.com/library/default.asp?url=/library/e...

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ビットすべて立った状態。)

http://channel9.msdn.com/ShowPost.aspx?PostID=7942

Re: Win32 console app. help

参考記事。

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ