1

親 CMD をアプリにアタッチすると、アタッチされた CMD をFreeconsoleを使用して解放した後、CMD に書き込み可能な空の行があります...「@Echo OFF」のように、「ENTER」を押すとエコーが返されます(@エコーオン)。

http://img607.imageshack.us/img607/566/captura1em.png

これは、例を示す VB コードです。

Private Sub Parse_Arguments()
    AttachConsole(-1)
    For I As Integer = 0 To My.Application.CommandLineArgs.Count - 1
        If My.Application.CommandLineArgs.Item(I) = "/?" Then
            Dim Logo As String = <a><![CDATA[Blah blah blah...]]></a>.Value
            Console.WriteLine(Logo)
            FreeConsole()
            End
        End If
    Next
end sub

私が言おうとしていることを理解していただければ幸いです。CMD を完全に冗長にする必要があります。つまり、CMD に最後の行を出力させたいということです」C:\Visual Studio Projects\Aero Switcher\Aero Switch\bin\Debug > "添付された CMD を解放するとき (私のプログラムが実行を終了するとき)、および "echo" なしで空行を出力しないようにします。

もう一つの例:

これは私が欲しいものです:

C:\>Process.exe
C:\>Text wrote from the process and process finished
c:\>Verbose CMD line, "c:\>" is shown, @Echo is ON, all good!.

これは私が得るものです:

C:\>Process.exe
C:\>Text wrote from the process and process finished
Damn empty line where I can write commands, not verbose line, @Echo is OFF.
C:\>Verbose CMD line.
4

2 に答える 2

2

古い質問ですが、私自身がこれに苦労していたので、調査結果を投稿すると思いました...

これに多くの時間を費やした後、私はそれを完全に間違って見ているという結論に達しました.

現在のディレクトリは、実行可能ファイルへの呼び出しの直後にリストされます。最初の Console.WriteLine() は、これと同じ行になります。

への呼び出しの後FreeConsole()、コンソールに戻ります。行が空白であるという事実は、ほとんど無関係です。CMD プロンプトには現在のディレクトリが表示されましたが、アプリケーションのすべての出力の前に表示さますユーザーが「通常の」コンソールに戻ったように見せたい場合は、次の呼び出しの前に現在のディレクトリを出力するだけですFreeConsole()

Console.Write(FileIO.FileSystem.CurrentDirectory & ">")

これは確かにハックのように感じますが、コンソール プロセスへのアタッチが機能する方法を考えると、おそらくそれしかできません。

于 2015-09-17T09:16:00.577 に答える
1

FreeConsole()追加するSendKeys.SendWait("{ENTER}")と、すべてが希望どおりに機能します。

Console.WriteLine(Logo)
FreeConsole()
SendKeys.SendWait("{ENTER}")
于 2016-10-11T16:50:40.433 に答える