gpt4 book ai didi

delphi - 可作为控制台和 GUI 进行编程

转载 作者:行者123 更新时间:2023-12-03 14:33:58 25 4
gpt4 key购买 nike

是否有可能(如果可以,我该如何)使用 Delphi 2007 让单个程序既作为控制台应用程序又作为 GUI 版本工作?

我想要的是,如果程序使用适当的命令行选项运行,它应该充当控制台程序,使用 WRITELN 将输出打印到控制台,但如果没有给出命令行参数,它应该运行为一个普通的 Delphi GUI 应用程序?

问题是,当作为控制台应用程序运行时,命令行解释器会等待应用程序终止,然后才允许您输入新命令,而从命令行启动的 GUI 应用程序会立即返回到命令行,并且GUI 应用程序在独立进程中启动。我希望保留这种行为。

我不介意这样的事情:

IF GUI THEN StartApplicationAsGUI(ParamStr(0))

即。我不介意如果需要的话,我必须使用某种形式的 EXECUTE 调用来重新启动应用程序,以便在 GUI 模式下启动它,只要在启动 GUI 版本时命令行界面返回到命令行输入即可。

我更喜欢以下解决方案/建议:

<Parse Comnand Line>
IF ConsoleMode THEN
   RunConsole(Parameters)
ELSE BEGIN
   Application.Initialize;
   Application.CreateForm(...)
   Application.Run;
END

(反之亦然,即如果 GUI 模式则以特殊方式执行操作)

这样我在制作GUI界面的时候仍然可以使用Delphi的IDE和VCL...

最佳答案

在 Windows 上,这有点棘手。实际上,控制台应用程序和 GUI 应用程序之间的区别在于 PE header 中的一个标志。您可以轻松地编写创建窗口的控制台应用程序,但这样您就始终拥有控制台窗口(不过您可以隐藏它,但当人们从 cmd 运行您的程序时,这不太好)。

但是,您可以编写一个 GUI 应用程序,根据需要使用 AllocConsole 创建控制台。功能:

A process can be associated with only one console, so the AllocConsole function fails if the calling process already has a console. A process can use the FreeConsole function to detach itself from its current console, then it can call AllocConsole to create a new console or AttachConsole to attach to another console.

If the calling process creates a child process, the child inherits the new console.

AllocConsole initializes standard input, standard output, and standard error handles for the new console. The standard input handle is a handle to the console's input buffer, and the standard output and standard error handles are handles to the console's screen buffer. To retrieve these handles, use the GetStdHandle function.

This function is primarily used by graphical user interface (GUI) application to create a console window. GUI applications are initialized without a console. Console applications are initialized with a console, unless they are created as detached processes (by calling the CreateProcess function with the DETACHED_PROCESS flag).

但是,当从 cmd 运行时,这可能会导致出现另一个控制台窗口,而不是重新使用现有的控制台窗口。不知道有没有好的解决方案。

关于delphi - 可作为控制台和 GUI 进行编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1629303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com