关于AttachConsole/Freeconsole API函数

本文关键字:API 函数 Freeconsole AttachConsole 关于 | 更新日期: 2023-09-27 18:11:12

当我将父CMD附加到我的应用程序,使用Freeconsole释放附加的CMD后,在CMD中有一个空行,我可以写…就像一个"@Echo OFF",当我按"ENTER"返回回显(@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完全verbose,我的意思是我希望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.

关于AttachConsole/Freeconsole API函数

一个老问题,但我自己也在努力解决这个问题,所以我想我应该把我的发现发布出来…

在花了很多时间之后,我得出结论,我对它的看法完全错误。

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

调用FreeConsole()后,我们回到控制台。行为空这一事实几乎无关紧要——CMD提示符确实显示了当前目录,但它出现在所有应用程序输出之前。如果您想让它看起来像用户回到"正常"控制台,那么只需在调用FreeConsole()之前输出当前目录:

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

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

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

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