PascalプログラムにC++関数「System()」の機能が必要です。それまたは同様の使用方法はありますか?
たとえば、C++関数を模倣したいと思います。
System("COLOR fc");
PascalプログラムにC++関数「System()」の機能が必要です。それまたは同様の使用方法はありますか?
たとえば、C++関数を模倣したいと思います。
System("COLOR fc");
C++ライブラリ関数system
は新しいプロセスを開始します。SysUtils.ExecuteProcess
FreePascal関数があなたが望むことをするように私には見えます。
他の方法として、コンソールの背景色を変更するだけの場合は、WindowsAPI関数SetConsoleTextAttributeを呼び出す必要があります。
問題は少し複雑です。これにはいくつかの方法があります。
*nix では、システムは unix.fpsystem() として利用できます。(ただし、libc システム関数と厳密に 100% 同じというわけではありません)
Windows では、 FPCはネイティブであり、POSIX または C ライブラリ レイヤーでは機能しません。したがって、Windows には system() エミュレーションはありません。
sysutils.Executeprocess は、Windows の "createprocess(ex)" およびnix Exec () 関数を抽象化します。ただし、これはシェル拡張用ではなく、実行するにはバイナリへのフル パスが必要です (たとえば、fsearch または同等の Delphi 関数を使用して)。
Process.TProcess は別の、より複雑な抽象化であり、より多くの機能 (パイピングなど) にアクセスします。2.6.2 のプロセス ユニットの新機能は、一般的なケースの単純な tprocess ラッパーである Runcommand 関数です。
さらに問題は、Windows でこのようなことを行うにはさまざまな方法があることです。
一般に、コマンドライン関連のものでない限り (この特定のケースのように) shellexecute を使用します。その場合は、方法 5.2 を使用します。
後で追加され、executeprocess の検証済みコード (メソッド 5.2)
uses
Sysutils;
begin
ExecuteProcess(getenvironmentvariable('COMSPEC'), ['/C','COLOR fd']);
end.
コマンド (color fd) を 1 つのパラメーターとして渡すことに注意してください。ただし、*nix の場合はこれがより重要です。
system()
プラットフォーム固有のコマンドライン プロセッサを呼び出します。たとえば、Windows では、invokeのsystem("command")
呼び出しで、はWindows のバージョンに応じてまたはのいずれかになります。CreateProcess()
%COMSPEC% /C "command"
%COMSPEC%
command.com
cmd.exe