【问题标题】:About AttachConsole/Freeconsole API function关于 AttachConsole/Freeconsole API 功能
【发布时间】:2016-10-12 00:50:40
【问题描述】:

当我将父 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 完全详细,我的意思是我希望 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.

【问题讨论】:

  • 您是否尝试过将应用程序的链接目标更改为控制台应用程序?这应该为您提供完美的控制台集成,但不会阻止您打开窗口。

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


【解决方案1】:

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

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

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

在调用FreeConsole() 之后,我们回到了控制台。该行为空白几乎无关紧要 - CMD 提示 确实 显示了当前目录,但它出现在您的所有应用程序输出之前之前。如果你想让用户看起来像是回到了 "normal" 控制台,那么只需在调用 FreeConsole() 之前输出当前目录即可:

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

这确实感觉像是一种 hack,但是通过附加到控制台进程的方式,这可能是您所能做的。

【讨论】:

  • 吹毛求疵:注意提示格式并不总是_currentdir_&gt;。它由“PROMPT”环境变量的内容决定(在控制台窗口中请参阅help prompt。)因此“正确”模仿它会涉及更多(而不是从 PowerShell 或其他解释器内部执行时) .
  • @Christian.K - 好点!从 Git bash shell 运行它肯定看起来不正确!就我而言,这无关紧要 - 这是一个供支持人员在内部使用的程序,我们只是碰巧有一些(年长的)员工更喜欢在命令提示符下工作。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2021-03-10
    • 2010-11-09
    相关资源
    最近更新 更多