• 締切済み

C#でGUI・CUIの判断する仕方を教えて下さい

アプリケーションを開発しています 開発環境 Microsoft Visual Studio 2005 net framework 2.0 C# GUI(Windows アプリケーション)とCUI(コンソールアプリケーション)の アプリケーション開発しています 単体のアプリケーションは動作しています 2つのアプリケーションを1つの(EXE)で実行できるアプリケーションを 開発したいです 起動仕方は EXE にパラメータを付けたらCUIで起動して パラメータなしならばGUIで起動したいです プログラムで起動の仕方を判断できるのですか? できるなら参考資料(サンプルコート・ホームページなど)を教えて下さい 宜しくお願いします。

noname#132530
noname#132530

みんなの回答

回答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(); } } } } }

noname#132530
質問者

補足

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"); } } } }

noname#132530
質問者

補足

tsukasa-12r さん回答ありがとうございました todo36 さんにお礼を記載していませんでしたので今回こちらで お礼させてもらいます コンソール アプリケーションで作りました こちらのサンプルで実行すると一瞬コマンドプロンプが表示されてしまいます コマンドプロンプを完全に消すことできませんか? 自分でもわかる範囲で実験してみましたけど完全に消すことできませんでした わかる方はテクニックを教えて下さい

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

Windows アプリケーションプロジェクト Formを表示せずにConsoleを出すときは↓の後半参照 http://dobon.net/vb/dotnet/programing/consoleinout.html

noname#132530
質問者

補足

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"); } のような感じにすれば良いと思います。

noname#132530
質問者

補足

tsukasa-12r さん回答ありかとうございました 確かにこのようにすると希望の通りになります GUI アプリケーションの時はコマンドプロンプトの 画面も機動しています コマンドプロンプトを隠すことできますか? 宜しくお願いします

関連するQ&A

  • GUIアプリケーションの開発について

    Windowsで動作する一番簡単なGUIアプリケーションの作り方を教えてください。今までC言語とJavaの初歩的な学習は大学の授業でやりましたが、作ったプログラムはコンソール画面で動作するCUIのものばかりでした。したがってGUIのプログラミングは全く学んだことがありません。そこで、例えば電卓のような簡単なGUIアプリケーションの作る手順を教えてください。またはそのような内容のWebページを教えてくださると嬉しいです。言語はC言語かJavaでお願い致します。 会社などで実際にソフトを開発する際にVisual Studioがよく使われているそうなので、できればVisual Studioで開発する方法を教えてくださるとありがたいです。 インストールしてあるVisual Studioは「Visual Studio 2013 Ultimate」です。回答宜しくお願い致します。

  • GUIの設定ツールが起動しないけどCUIなら起動する。どうして?

    こんばんは。Turboプラスでアップデートやインストールする時にXwindowシステム?の上では起動しないのに、コンソールから「turbo+ --cui」ってコマンドを入れるとCUIっぽいのが起動する。これってどうしてなんですか? Turboプラスに限らなくてよいのでこんな現象の理屈を教えて欲しいです。 それから、GUIの設定ツールはどれもCUIでも操作できるものなんでしょうか。 Linuxを使い慣れてる人はCUI操作で設定は全部できるのかなぁと思いまして。 さすがにGUIのアプリケーションは無理ですよね。

  • LinuxとGUI

    LinuxとGUIについてお聞きしたいことがあるのですが、 よろしくお願いいたします。 自分は今までLinux=CUIという認識をしてまして、 Linuxはインストールして起動したら、コマンドプロンプトの画面だけがずっと表示されているものなのだと思ってました。 実際、Windowsにcolinuxをインストールした時は、コマンドプロンプトしか表示されなかったので、そういうものなのだと思ってました。 しかし、最近VMware PlayerにUbuntuをインストールしてみて、LinuxディストリビューションでもWindowsのようにアイコンなどのGUIを表示できるものがあるのだと初めて知りました。 そこで疑問なのですが、例えばEclipseは、Linux上で利用出来、また、wxWidgetsを利用してGUI部分の構築も出来るらしいですが、EclipseとwxWidgetsを使ってCUIしかなさそうなLinuxディストリビューション上でソフトウェア開発をする場合、CUIしかないLinuxディストリビューション上でGUI付きのソフトを開発できるものなのでしょうか?Eclipse+wxWidgetsを起動したら、コマンドプロンプトからIDEのGUI画面に移るのでしょうか? CUIオンリーのLinuxでGUI使いまくりのウェブブラウザなどを起動したらどうなるのかも疑問です。 そもそも「CUIしかない」とか「CUIオンリー」とかの認識が間違ってるのかもしれませんが、どなたかご教授いただけると幸いです。 よろしくお願いいたします。

  • MacOSでのC#開発環境について

    これからC#の勉強を始めようと思っています。 windowsのVisual studio 2017のコンソールアプリケーションプログラムでformのようなGUI機能を使用出来るものがあると思うのですが、macOSでも可能なのでしょうか…

  • ラズベリーパイ3 C言語でGUIを作成する方法

    ラズベリーパイ3(OS raspbian light)のC言語を使って通信用のプログラムを作成しています。 現在このプログラムはコンソールアプリケーションなのですが、 GUIで、パラメータ設定や、受信データのグラフ化をできるようにしたいと考えています。 VCのように、ボタン押下でイベントを発生させて画像やグラフを表示する開発環境はないものでしょうか。あればどのような手順で構築すれば良いでしょうか。 ご助言頂ければ幸いです。

  • c#で作ったアプリケーションを他のPCで起動するには?

    c#で作ったアプリケーションを他のパソコンにて起動させたいのですが、起動せずに、動作を停止してしまいます。 対処としては、開発したパソコンと同じ設定にすることが一番だろうというのはわかるのですが、アプリケーションをインストールする段階で、その設定等を行う方法がないか質問させていただきました。 こちらの開発環境は、 OS : windows vista 開発ソフト : visual studio 2008 profetional Edition(c#にて) アプリケーションの対応framework:.NET Framework 3.5 追加した参照設定:Mysql.Data にて開発しました。 もし何かお分かりになる方、もしくは参考にできるサイト等がありましたらお教えください。 また、こちらの環境に足らない部分がありましたら、補足させていただきますので、ご意見お願いします。

  • [BCC|CUI] コマンドプロンプトへ入出力

    こんにちは。 コマンドプロンプトを2つ起動して、一方のコマンドプロンプトから もう一方のコマンドプロンプトへ入出力したいのですが何か方法はあるのでしょうか? たとえば、サンプルとして xxx.exe ProcessID Hello! と実行したら、もう一方のコマンドプロンプトにHello!と表示されるようにしたり、逆に、一方のコマンドプロンプトに表示されたメッセージを受け取って表示するなどです。 また、こういうのはどういうキーワードで調べたらいいのでしょうか? 「プロセス間通信」となるのでしょうか? よろしくお願い致します。 アプリケーション形態:コンソールアプリケーション(CUI) コンパイラ:Borland C++ 5.5.1 for Win32 OS:Windows 2000

  • C# コンソールアプリケーション 追加

    visual studio 2013でC#のコンソールアプリケーションを作成したのですがコンソールアプリケーションにボタンを追加する方法はどうすれば良いのでしょうか?

  • c# .Net Frameworkが不要なExeの作成

    Visual Studio 2008でC#のプログラムを作成したのですが、.Net FrameworkがインストールされていないPCでは使用できません。Exeに.Net Frameworkを含めることはできますか?

  • .NetでのDirectDrawの使用について

    現在会社のプロジェクトでC++でDirectDrawを使った業務用アプリケーションを開発しようとしているのですが,普段DirectDrawを用いたアプリケーションはwindows APIを使って開発を行なうことが多いと思うのですが,visual studio 2005 +.Netを用いてdirectdrawを使ったアプリケーションを作成することは可能なのでしょうか. お答えいただけると幸いです. 開発環境 visual studio 2005 .NET Framework 2.0 DirectX 7.0

専門家に質問してみよう