
アプリケーションを開発しています
開発環境
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) フレームワーク「4.8.1」で、[Sub Main]が動かない。助けて下さい 3 2022/11/14 15:40
- その他(ソフトウェア) ソフトが異常終了します 1 2022/08/28 01:41
- Windows 10 ノートPCをスリープにするとアプリが閉じてしまう。 3 2022/04/14 18:33
- その他(OS) WindowsServer2019でWORKGROUPのRDSの設定 1 2023/02/15 17:43
- アプリ アプリケーションが見つかりません 2 2022/07/13 21:07
- Windows 8 「Windowsの設定画面で開発者モードをONにして下さい」Win8.1でインストールが中断 2 2022/09/10 01:47
- ソフトウェア LINUX向けのGUIアプリケーション開発 1 2022/09/21 17:38
- iOS システムの復元の実行 3 2023/08/28 22:26
- ハッキング・フィッシング詐欺 Windows11 PCの不具合 4 2023/03/03 22:06
- UNIX・Linux [Linux Mint] インストールしたアプリを Mintメニューの「アプリ一覧」に表示させたい 1 2022/10/01 09:04
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コンソールアプリケーションの...
-
フレームワーク「4.8.1」で、[S...
-
httpd.pidって何ですか?
-
外部アプリケーションの起動に...
-
Vba アプリケーションが立ち上...
-
VBA初心者です。ExcelのVBAで他...
-
pccNTmon.exeとntrtscan.exeの違い
-
他アプリケーションの終了
-
自分自身を更新するプログラム
-
「AcroRd32.exe」これってウイ...
-
Windowsリブート時に1回だけア...
-
Console Applicationをタスクト...
-
WSH(VBScript)でアプリケーショ...
-
Shell関数の終了を調べる方法
-
vb6で異なるのプロジェクト間で...
-
Ctrl + P のメッセージ送信
-
Apacheを起動するとエラーにな...
-
C#でGUI・CUIの判断する仕方を...
-
[Visual C++]VCが起動しません...
-
2重起動の防止
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フレームワーク「4.8.1」で、[S...
-
VBSでのSendKeysでの画面の最小化
-
Vba アプリケーションが立ち上...
-
コンソールアプリケーションの...
-
自分自身を更新するプログラム
-
Accessフォームからの外部アプ...
-
イラストレーターCS4のシリアル...
-
Windowsプログラムのビジー状態...
-
VB.NETでフォームアクティブの...
-
WSH(VBScript)でアプリケーショ...
-
C#でGUI・CUIの判断する仕方を...
-
VB.NETでMessageBoxを表示した...
-
Console Applicationをタスクト...
-
pccNTmon.exeとntrtscan.exeの違い
-
初回接続の遅い原因について
-
OSによるWinExecの動...
-
vb6で異なるのプロジェクト間で...
-
アプリケーションをVBS(WSH?)で...
-
SYSTEM権限でプロセス機動
-
MFCアプリケーションでの終了コ...
おすすめ情報