2012-04-05 4 views
1

C#のハイブリッドGUI/cliアプリケーションの例をたくさん見ました。私はそのようなアプリを実装しましたが、コマンドラインで実行されたときに.exeをすぐにプロンプ​​トに戻さないようにする方法を考え出すのは苦労しています。私は次の出力C#hybird Winforms/console appがcmdプロンプトに戻る

C:\Users\john\Documents\Visual Studio 2010\Projects\test\test\test\bin\Debug>test.exe -param1 test 
-param2 test2 

C:\Users\john\Documents\Visual Studio 2010\Projects\test\test\test\bin\Debug>Output was successful. File saved as: c:\test\test.html 
finished 

はラインが私の、私は私が私のメインのコードのリーチの端を持って知っているとき、文字列のI出力である...これはWinformsのでは正常に動作し、「終了」を取得

//defines for commandline output  
    [DllImport("kernel32.dll")] 
    static extern bool AttachConsole(int dwProcessId); 
    private const int ATTACH_PARENT_PROCESS = -1; 

    [STAThreadAttribute] 
    static void Main(string[] args) 
    { 
     // load cli 
     // redirect console output to parent process;   
     // must be before any calls to Console.WriteLine()   
     AttachConsole(ATTACH_PARENT_PROCESS); 

     if (args.Length == 0) 
     { 
      //loads gui 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new form_Main()); 
     } 
     else 
     { 

      cli_main cli = new cli_main(); 
      cli.start_cli(args); 

      Console.WriteLine("finished"); 

      System.Windows.Forms.SendKeys.SendWait("{ENTER}"); 
      Application.Exit(); 

     } 
    } 

プロジェクトはWinformsで、私はGUIとして起動しましたが、現在はハイブリッドGUI/CLIにしようとしています

そして、私のメインコードとスレッドを実行しているように見えます。 ..

私はちょうど.exeをコマンドラインから実行したときにそのパラメータでコマンドラインに戻らないようにしておくのが困惑していますか?そして、点滅しているカーソルで待ってから、htmlファイルについての行を出力してから、「完了」の行を出力し、最後にコマンドプロンプトに戻ります。

は私が

System.Windows.Forms.SendKeys.SendWait("{ENTER}"); 
Application.Exit(); 

を削除し、代わりにApplication.Exit();使用Environment.Exit(0);を使用してのように、多くのものを試してみたが、それはいつもすぐにコマンドプロンプトに戻り、また、私はライン

後5秒間スリープに入れてみました
cli.start_cli(args); 

が、それは私が、私はそれがすぐにコマンドプロンプトに戻ることができる方法を理解していないと思いますし、それはそれさえもライン

を持っていない、どちらか動作しませんでした
Console.WriteLine("finished"); 
+0

私はハイブリッドCLIとGUI .exeを作成しようとしましたが、私はコンソールアプリケーション私は回避策を得たが、まだ秒間ポップアップするcmdウィンドウがポップアップする。だから私はちょうど2つの.exeと一緒に行った、GUIの1のためのcliのために作成し、.dllのlibを2の間のメインコードを共有するために作成した。 –

答えて

6

FWIW、私は最初のアプローチも試みました。私はちょうどコンソールウィンドウを隠すことになりました。

IntPtr handle = GetConsoleWindow(); 
if (handle != IntPtr.Zero) 
{ 
    ShowWindow(handle, 0); // 0=SW_HIDE 
} 

これは、タスクバーからでもウィンドウを完全に隠してしまいます。それは短い秒のために点滅しますが、私のケースでは許容です

関連する問題