C++库函数系统< /> >启动一个新进程。在我看来,FreePascal函数SysUtils.ExecuteProcess将执行您想要的操作,winapi,pascal,freepascal,fpc,Winapi,Pascal,Freepascal,Fpc" /> C++库函数系统< /> >启动一个新进程。在我看来,FreePascal函数SysUtils.ExecuteProcess将执行您想要的操作,winapi,pascal,freepascal,fpc,Winapi,Pascal,Freepascal,Fpc" />

Winapi Pascal中的System()函数? 我需要PASCAL程序中C++函数“Sype()”的功能。 有什么可能的使用方法吗 例如,我想模仿C++函数: System("COLOR fc"); > C++库函数系统< /> >启动一个新进程。在我看来,FreePascal函数SysUtils.ExecuteProcess将执行您想要的操作

Winapi Pascal中的System()函数? 我需要PASCAL程序中C++函数“Sype()”的功能。 有什么可能的使用方法吗 例如,我想模仿C++函数: System("COLOR fc"); > C++库函数系统< /> >启动一个新进程。在我看来,FreePascal函数SysUtils.ExecuteProcess将执行您想要的操作,winapi,pascal,freepascal,fpc,Winapi,Pascal,Freepascal,Fpc,如果您真正想做的只是更改控制台上的背景颜色,那么另一种选择是调用Windows API函数。system()调用特定于平台的命令行处理器。例如,在Windows上,system(“command”)调用CreateProcess()调用%COMSPEC%/C“command”,其中%COMSPEC%是command.com或cmd.exe,具体取决于Windows版本。问题有点复杂。有几种方法可以做到这一点 在*nix上,系统以unix.fpsystem()的形式提供。(虽然严格来说与libc系

如果您真正想做的只是更改控制台上的背景颜色,那么另一种选择是调用Windows API函数。

system()
调用特定于平台的命令行处理器。例如,在Windows上,
system(“command”)
调用
CreateProcess()
调用
%COMSPEC%/C“command”
,其中
%COMSPEC%
command.com
cmd.exe
,具体取决于Windows版本。

问题有点复杂。有几种方法可以做到这一点

  • *nix上,系统以unix.fpsystem()的形式提供。(虽然严格来说与libc系统功能并非100%相同)

  • 在Windows上,FPC是本机的,不能通过POSIX或C库层工作。因此,Windows上没有system()仿真

  • Executeprocess抽象了Windows“createprocess(ex)”和nix Exec()函数。但这并不适用于shell扩展,需要执行二进制文件的完整路径(例如,通过使用fsearch或等效的Delphi函数)

  • Process.TProcess是另一个更复杂的抽象,访问更多的功能(如管道)。2.6.2中流程单元的新功能是RUNCOMAND函数,它是用于常见情况的简单tprocess包装器

  • 此外,问题是在Windows上有许多不同的方法来做类似的事情,那么选择什么呢

  • 旧版和跨Windows版本的可移植方式:search command.com并使用/C执行
  • 旧的/控制台样式,NT方式,使用COMSPEC以/C启动cmd.exe
  • 在GUI方式中,使用shellexecute()。主要用于启动浏览器和其他与扩展相关的应用程序
  • 创建自己的、搜索路径、展开environmentvariables、自己解析cmdline,然后调用基本的createprocess()例程
  • 一般来说,我会使用shellexecute,除非它真的是命令行的东西(比如这个特定的例子),然后我会使用方法5.2

    后来添加了executeprocess的验证代码(方法5.2)


    请注意,我将命令(color fd)作为一个参数传递,但在*nix情况下,afaik更为重要。

    。请注意,您可能需要执行“cmd/c color fc”。@JimMischel我不想创建外部进程。我想在我的程序控制台中执行命令。我正在使用SetConsoleTextAttribute。但是这个函数不能像“COLOR arg”那样将控制台背景设置为纯白色。@Hooch:“不适合我”并不能给我们提供太多的信息。我建议您在这里更新您的问题,或者提出一个新问题,显示您正在使用的代码,以及您收到的错误消息。executeprocess是createprocess派生,而不是shellexecute派生。如果它只执行二进制文件,并且只有完整路径,请参阅我的另一个答案。这个答案失败:ExecuteProcess('command.com','C COLOR fd');使用command.com的完整路径,或者更好的getEnvironmentVariable('COMSPEC');你能告诉我更多关于如何使用方法2吗?我只想使用“COLOR arg”命令将控制台背景更改为纯白色。Pascal颜色更改函数使背景为灰色,而不是白色。请在问题中添加不使背景为白色的代码。我为方法5.2添加了代码。您的代码给出了错误:为调用“GetEnvironmentVariable”指定的参数数量错误。但用“cmd.exe”替换GetEnvVar会执行。但它什么也没做。ExecuteProcess('cmd.exe',['/C','COLOR fd']);很奇怪。这适用于我在2.6.0和trunk上的工作,包括win32和win64。此外,我真的无法想象为什么它不能工作(因为所有使用的函数都至少是2.2.0+,这已经被认为是石器时代的版本。我看到你在Pascal方面很好。你能帮我解决这个问题吗?我能通过邮件联系你吗?
    uses 
     Sysutils;
    begin
      ExecuteProcess(getenvironmentvariable('COMSPEC'), ['/C','COLOR fd']);
    end.