1

C# 用のハイブリッド gui/cli アプリの例を数多く見てきました。私はそのようなアプリを実装しましたが、.exe をコマンド ラインで実行したときにすぐにプロンプ​​トに戻らないようにする方法を理解するのに苦労しています。

    //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();

        }
    }

次の出力が得られます

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

「finished」という行は、メイン コードの最後に到達したことがわかっているときに出力する文字列です...これは Winforms で正常に動作します。私のプロジェクトは Winforms であり、GUI として開始しましたが、今はハイブリッドにしようとしています。 GUI/CLI

そして、メインコードとスレッドを実行しているようで、デバッグ中にそれらが表示され、最終出力ファイルが作成されます...

コマンドプロンプトに戻らないように、コマンドラインからパラメーターを使用して実行したときに.exeを保持する方法について困惑していますか?? そして、カーソルを点滅させたまま待機させ、htmlファイルに関する行と「終了しました」という行を出力し、最後にコマンドプロンプトに戻ります。

私は削除のような多くのことを試しました

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

Application.Exit();useを使用する代わりに、Environment.Exit(0);常にすぐにコマンドプロンプトに戻ります。また、行の後に5秒間スリープさせてみました

cli.start_cli(args);

しかし、それもうまくいきませんでした。コマンドプロンプトにすぐに戻る方法を理解していないと思います。

Console.WriteLine("finished");
4

1 に答える 1

6

FWIW、最初のアプローチも試しました。次を使用してコンソールウィンドウを非表示にするだけになりました。

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

これにより、タスクバーからでもウィンドウが完全に非表示になります。一瞬点滅しますが、私の場合は許容範囲です

于 2012-12-05T15:55:01.123 に答える