关于AttachConsole / Freeconsole API函数

时间:2013-04-29 06:04:53

标签: c# .net vb.net command-line cmd

当我将父CMD附加到我的应用程序后,在使用 Freeconsole 释放附加的CMD后,CMD中有一个空行我可以写...就像&#34; < strong> @Echo OFF &#34;,当我按下&#34; ENTER&#34;返回echo( @Echo ON )。

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打印最后一行&#34; C:\ Visual Studio Projects \ Aero Switcher \ Aero Switch \ bin \ Debug&gt; &#34;释放附加的CMD时(当我的程序完成执行时),而不是在没有&#34; echo&#34;的情况下打印空行。

另一个例子:

这就是我想要的:

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.

2 个答案:

答案 0 :(得分:2)

一个老问题,但我自己也在努力解决这个问题,所以我想我会发表我的发现......

在花了很多时间之后,我得出的结论是我完全错了。

在调用可执行文件后立即列出当前目录 - 您的第一个Console.WriteLine()将与此位于同一行。

致电FreeConsole()后,我们又回到了控制台。该行空白的事实几乎无关紧要 - CMD提示确实显示当前目录,但在所有应用程序输出之前显示。如果您希望看起来用户回到“普通”控制台,那么只需在调用FreeConsole()之前输出当前目录:

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

这确实感觉像是一个黑客,但随着附加到控制台进程的方式工作,它可能是你所能做的。

答案 1 :(得分:1)

FreeConsole()添加SendKeys.SendWait("{ENTER}")之后,它将以您想要的方式运作。

Console.WriteLine(Logo)
FreeConsole()
SendKeys.SendWait("{ENTER}")