我需要 Pascal 程序中的 C++ 函数“System()”的功能。有没有可能使用它或类似的方法?
比如我想模仿C++函数:
System("COLOR fc");
我需要 Pascal 程序中的 C++ 函数“System()”的功能。有没有可能使用它或类似的方法?
比如我想模仿C++函数:
System("COLOR fc");
C++ 库函数system
启动一个新进程。在我看来,FreePascal 函数SysUtils.ExecuteProcess
会做你想做的事。
如果您真正想做的只是更改控制台上的背景颜色,您的另一种选择是调用 Windows API 函数SetConsoleTextAttribute。
问题有点复杂。有几种方法可以解决这个问题。
在*nix 上,系统可以作为 unix.fpsystem() 使用。(虽然不严格 100% 与 libc 系统函数相同)
在Windows上,FPC 是原生的,不能通过 POSIX 或 C 库层工作。因此,Windows 上没有 system() 仿真。
sysutils.Executeprocess 抽象了 Windows“createprocess(ex)”和nix Exec () 函数。这不是用于 shell 扩展,并且需要执行二进制文件的完整路径(例如,通过使用 fsearch 或等效的 Delphi 函数)
Process.TProcess 是另一个涉及更多此类抽象的抽象,可以访问更多功能(如管道)。2.6.2 中流程单元的新功能是 Runcommand 函数,它们是常见情况的简单 tprocess 包装器。
此外,问题是在 Windows 上有很多不同的方法可以做这样的事情,那么选择什么?
一般来说,我会使用 shellexecute ,除非它真的是命令行的东西(比如这个特定的情况),然后我会使用方法 5.2。
稍后添加,经过验证的执行过程代码(方法 5.2)
uses
Sysutils;
begin
ExecuteProcess(getenvironmentvariable('COMSPEC'), ['/C','COLOR fd']);
end.
请注意,我将命令 (color fd) 作为一个参数传递,尽管 afaik 在 *nix 情况下更为重要。
system()
调用特定于平台的命令行处理器。例如,在 Windows 上,system("command")
调用CreateProcess()
invoke %COMSPEC% /C "command"
,其中%COMSPEC%
是command.com
或cmd.exe
取决于 Windows 版本。