如果我有一个本机C++ Windows程序(即入口点是WinMain),我如何查看控制台函数的输出,如std :: cout?
是否有可能(如果是这样,我如何)使用Delphi 2007将单个程序作为控制台应用程序和GUI版本工作?
我所追求的是,如果程序使用适当的命令行选项运行,它应该用作控制台程序,使用WRITELN将输出打印到控制台,但如果没有给出命令行参数,它应该作为普通Delphi运行GUI应用程序?
问题是当作为控制台应用程序运行时,命令行解释程序在允许您输入新命令之前等待应用程序终止,而从命令行启动的GUI应用程序会立即返回到命令行和GUI应用程序在分离的过程中启动.我希望保留这种行为.
我不介意这样的事情:
如果GUI那么StartApplicationAsGUI(ParamStr(0))
即.我不介意我必须使用某种形式的EXECUTE调用重新启动应用程序,以便在GUI模式下启动它(如果需要),只要命令行界面在GUI版本启动时返回到命令行输入即可.
我更喜欢一个解决方案/建议:
<Parse Comnand Line>
IF ConsoleMode THEN
RunConsole(参数)
ELSE BEGIN
Application.Initialize;
Application.CreateForm(...)
Application.Run;
结束
(反之亦然,即如果GUI模式以特殊方式做事)
这样我在制作GUI界面时仍然可以使用Delphi的IDE和VCL ......
我有一个progaram,既可以作为winform运行,也可以从命令行运行.如果从命令行调用它,我调用AttachConsole(-1)以附加到父控制台.
但是,在我的程序结束后,用户必须按Enter键才能返回标准命令提示符("c:\>").有没有办法避免这种需要?
谢谢.我可以将它包装在一个cmd文件中,以避免这个问题,但我想从我的exe中做到这一点.
我正在学习C++,我制作了一个新程序,我删除了一些代码,现在我的控制台窗口不会隐藏有没有办法让它在启动时隐藏,而不会看到它
说我有以下代码,syscall用于隐藏命令行窗口
process := exec.Command(name, args...)
process.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
err := process.Start()
if err != nil {
log.Print(err)
}
Run Code Online (Sandbox Code Playgroud)
但是当我编译它并尝试在Windows中运行它时,命令行窗口再次出现
我该怎么做才能防止命令行窗口出现?
PS我已经知道如何使用golang源编译成Windows GUI可执行文件go build -ldflags -H=windowsgui,但这样做只能确保程序本身不会Exec显示命令行窗口,无论如何都会显示那些窗口
背景:我们开发了win32应用程序,并在Windows上使用"Thompson Toolkit"为我们提供了一个类似于unix的shell,我们将它们用作命令行.
我们有一个GUI程序(带有WinMain和消息循环),我们想要写入控制台,但printf等不起作用,即使我们从控制台启动程序.我们如何从GUI程序写入控制台?我们需要在那里打印文本,以便自动构建系统可以显示错误消息等.
谢谢.
我正在Delphi 7中编写一个标准的Windows应用程序.
如果我正在编写控制台应用程序,我可以调用以下内容输出到cmd行或输出文件.
writeln('Some info');
Run Code Online (Sandbox Code Playgroud)
如果我从我从命令行启动的标准GUI应用程序执行此操作,则会出现错误.
I/O Error 105
Run Code Online (Sandbox Code Playgroud)
必须有一个简单的解决方案来解决这个问题.基本上我希望我的应用程序有两种模式,GUI模式和非GUI模式.如何正确设置以便我可以回写cmd窗口?
我想要一个具有以下行为的Windows应用程序:
1.如果它是从现有的命令行窗口(cmd.exe)启动,那么它将其stdout写入该控制台.
2.如果通过双击其图标启动它,它不会打开新的控制台,也不会在任何地方写入它的标准输出.
要实现1,我可以设置/SUBSYSTEM链接器参数,CONSOLE但如果我双击应用程序图标,则会打开一个新的控制台窗口.
要实现2,我设置相同的参数WINDOWS,但是如果我从控制台启动应用程序,它的stdout不会被定向到控制台.
我希望同一个可执行文件具有这两种行为.
到目前为止,我发现我可以创建一个/SUBSYSTEM:WINDOWS可执行文件并执行此操作:
DWORD ret = AttachConsole(ATTACH_PARENT_PROCESS)
if (ret != 0) { // succeeds only if the parent is cmd.exe
HANDLE outh = GetStdHandle(STD_OUTPUT_HANDLE);
WriteFile(outh, "Hello", 5, NULL, NULL);
}
Run Code Online (Sandbox Code Playgroud)
Hello如果进程从一个进程启动,则写入控制台,否则不执行任何操作.
现在只有将CRT outh作为stdout的HANDLE的问题.我怎样才能做到这一点?
此选项的另一个问题是cmd.exe在启动的进程上没有阻塞.启动新进程后,cmd.exe将返回到提示符,并Hello在提示符处出现字符串.如果用户在控制台上按Enter,则会出现另一个提示.关于如何预防的任何想法?
创建可用作GUI应用程序和控制台工具的应用程序的最佳方法是什么?
以下是相关信息:一个可执行文件可以同时是控制台和GUI应用程序吗?
我的问题更多的是关于Java,Maven,JavaFX - 我的应用程序目前作为JavaFX GUI应用程序运行.
PS任何相对的帮助,非常感谢.我完全糊涂了.