
アプリケーションを開発しています
開発環境
Microsoft Visual Studio 2005
net framework 2.0
C#
GUI(Windows アプリケーション)とCUI(コンソールアプリケーション)の
アプリケーション開発しています
単体のアプリケーションは動作しています
2つのアプリケーションを1つの(EXE)で実行できるアプリケーションを
開発したいです
起動仕方は
EXE にパラメータを付けたらCUIで起動して
パラメータなしならばGUIで起動したいです
プログラムで起動の仕方を判断できるのですか?
できるなら参考資料(サンプルコート・ホームページなど)を教えて下さい
宜しくお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
フォームアプリケーションに設定して、
[DllImport("Kernel32.dll")]
static extern bool AllocConsole();
[DllImport("Kernel32.dll")]
static extern bool FreeConsole();
if (args.Length == 0)
{
Application.Run(new Form1());
}
else
{
AllocConsole();
Consol.WriteLine("HogeHoge");
FreeConsole();
}
としてやる方法もありますが、この方法の場合、コマンドラインから実行したときにも別のコンソールが作成されます。
あと、親プロセスのコンソールにアタッチしてやることも可能です。
これもフォームアプリケーションでビルドしてください。
とりあえず、親が "cmd" かどうかで判定しています。
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace Test
{
static class Program
{
[DllImport("Kernel32.dll")]
static extern bool AllocConsole();
[DllImport("Kernel32.dll")]
static extern bool FreeConsole();
[DllImport("Kernel32.dll")]
static extern bool AttachConsole( int processHandle );
private const int ATTACH_PARENT_PROCESS = -1;
[STAThread]
static void Main(string[] args)
{
if (args.Length == 0)
{
Application.Run(new Form1());
}
else
{
Process p = Process.GetCurrentProcess();
PerformanceCounter pc = new PerformanceCounter("Process", "Creating Process Id", p.ProcessName);
Process parent = Process.GetProcessById((int)pc.RawValue);
if (parent.ProcessName.Equals("cmd"))
{
AttachConsole(ATTACH_PARENT_PROCESS);
}
else
{
AllocConsole();
}
Console.WriteLine("HogeHoge");
if (!parent.ProcessName.Equals("cmd"))
{
FreeConsole();
}
}
}
}
}
この回答への補足
tsukasa-12r さん回答ありがとうございました
PerformanceCounter pc = new PerformanceCounter("Process", "Creating Process Id", p.ProcessName);
この部分はちょっと時間がかかりますね
コマンドプロンプトで実行すると最後のカレント表示がされません
しかしリターンキーを押すとカレントが表示されます
何か実行中見たいて聞きなりましたのでネットで調べましたけどわかりませんでした
解決する方法はあるのですか?
宜しくお願いします
No.3
- 回答日時:
ちょっと無理やりっぽいですが、こんな感じで、どうでしょう。
using System.Diagnostics;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace Test
{
static class Program
{
[DllImport("User32.Dll")]
static extern int ShowWindow( IntPtr hWnd, int nCmdShow );
private const int SW_HIDE = 0;
static void Main(string[] args)
{
if (args.Length == 0)
{
Process p = Process.GetCurrentProcess();
IntPtr hwnd = p.MainWindowHandle;
ShowWindow(hwnd, SW_HIDE);
Application.Run(new Form1());
}
else
{
Console.WriteLine("hogehoge");
}
}
}
}
この回答への補足
tsukasa-12r さん回答ありがとうございました
todo36 さんにお礼を記載していませんでしたので今回こちらで
お礼させてもらいます
コンソール アプリケーションで作りました
こちらのサンプルで実行すると一瞬コマンドプロンプが表示されてしまいます
コマンドプロンプを完全に消すことできませんか?
自分でもわかる範囲で実験してみましたけど完全に消すことできませんでした
わかる方はテクニックを教えて下さい
No.2
- 回答日時:
Windows アプリケーションプロジェクト
Formを表示せずにConsoleを出すときは↓の後半参照
http://dobon.net/vb/dotnet/programing/consoleino …
この回答への補足
static void Main(string[] args)
{
System.IO.StreamWriter standard = new System.IO.StreamWriter(Console.OpenStandardOutput());
// 自動的にフラッシュされるようにする
standard.AutoFlush = false;
// Consoleの出力ストリームを変更する
Console.SetOut(standard);
if (args.Length == 0)
{
Application.Run(new Form1());
}
else
{
for (int i = 0; i < args.Length; ++i)
{
Console.WriteLine("hogehoge-" + args[i]);
}
Console.WriteLine("hogehoge-end");
}
}
でプログラム作成しましたけど
コマンドプロンプトで(WindowsApplication1.exe A B)しても何も表示しません
いまいち使い方がわかりません
No.1
- 回答日時:
まず、プロジェクトのプロパティーの「アプリケーション」タブの「出力の種類」を「コンソール アプリケーション」にします。
次に、Program.csを
static void Main(string[] args)
{
if (args.Length == 0)
{
Application.Run(new Form1());
}
else
{
Console.WriteLine("hogehoge");
}
のような感じにすれば良いと思います。
この回答への補足
tsukasa-12r さん回答ありかとうございました
確かにこのようにすると希望の通りになります
GUI アプリケーションの時はコマンドプロンプトの
画面も機動しています
コマンドプロンプトを隠すことできますか?
宜しくお願いします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windowsプログラムのビジー状態...
-
SetWindowPosについて
-
フレームワーク「4.8.1」で、[S...
-
pccNTmon.exeとntrtscan.exeの違い
-
Macターミナルで実行中のプログ...
-
メモリが不足しています(VBA)
-
VBAの配列サイズとメモリに関して
-
C++ 画像をダウンロード
-
家電製品の電力周波数を変える機械
-
パソコンの演算速度について
-
TCP/IP通信時のサーバーからの受信
-
プロセスIDの取得方法について
-
メッセージボックスのボタン名変更
-
64BitOSについて
-
DoEvents関数って何?
-
C#でのbatファイル実行結果取得
-
SerialPortのDataReceivedイベ...
-
ヘッダファイル? malloc.hと...
-
独立した複数のプログラムを統...
-
C++からCへのソース変換について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WSH(VBScript)でアプリケーショ...
-
フレームワーク「4.8.1」で、[S...
-
VB.NETでMessageBoxを表示した...
-
コンソールアプリケーションの...
-
SetWindowPosについて
-
pccNTmon.exeとntrtscan.exeの違い
-
Accessフォームからの外部アプ...
-
初回接続の遅い原因について
-
Console Applicationをタスクト...
-
VBSでのSendKeysでの画面の最小化
-
Vba アプリケーションが立ち上...
-
イラストレーターCS4のシリアル...
-
MFCアプリケーションでの終了コ...
-
実行時のコマンドプロンプトを...
-
C#でGUI・CUIの判断する仕方を...
-
アプリケーションをVBS(WSH?)で...
-
OSによるWinExecの動...
-
vb6で異なるのプロジェクト間で...
-
SYSTEM権限でプロセス機動
-
VB.NETでフォームアクティブの...
おすすめ情報