-2

PascalプログラムにC++関数「System()」の機能が必要です。それまたは同様の使用方法はありますか?

たとえば、C++関数を模倣したいと思います。

System("COLOR fc");
4

3 に答える 3

3

C++ライブラリ関数systemは新しいプロセスを開始します。SysUtils.ExecuteProcessFreePascal関数があなたが望むことをするように私には見えます。

他の方法として、コンソールの背景色を変更するだけの場合は、WindowsAPI関数SetConsoleTextAttributeを呼び出す必要があります。

于 2012-12-30T01:09:52.460 に答える
1

問題は少し複雑です。これにはいくつかの方法があります。

  1. *nix では、システムは unix.fpsystem() として利用できます。(ただし、libc システム関数と厳密に 100% 同じというわけではありません)

  2. Windows では、 FPCはネイティブであり、POSIX または C ライブラリ レイヤーでは機能しません。したがって、Windows には system() エミュレーションはありません。

  3. sysutils.Executeprocess は、Windows の "createprocess(ex)" およびnix Exec () 関数を抽象化します。ただし、これはシェル拡張用ではなく、実行するにはバイナリへのフル パスが必要です (たとえば、fsearch または同等の Delphi 関数を使用して)。

  4. Process.TProcess は別の、より複雑な抽象化であり、より多くの機能 (パイピングなど) にアクセスします。2.6.2 のプロセス ユニットの新機能は、一般的なケースの単純な tprocess ラッパーである Runcommand 関数です。

  5. さらに問題は、Windows でこのようなことを行うにはさまざまな方法があることです。

    1. 古い W​​indows バージョンとクロス Windows バージョンの移植可能な方法: command.com を検索し、/C で実行します。
    2. 古い/コンソール スタイル、NT 方式、COMSPEC を使用して /C で cmd.exe を起動
    3. GUI の方法では、shellexecute() を使用します。主に、拡張機能に関連付けられたブラウザやその他のアプリケーションを起動するために使用されます。
    4. 独自のものを作成し、PATH を検索し、環境変数を展開し、コマンドラインを自分で解析してから、基本的な createprocess() ルーチンを呼び出します。

一般に、コマンドライン関連のものでない限り (この特定のケースのように) shellexecute を使用します。その場合は、方法 5.2 を使用します。

後で追加され、executeprocess の検証済みコード (メソッド 5.2)

uses 
 Sysutils;
begin
  ExecuteProcess(getenvironmentvariable('COMSPEC'), ['/C','COLOR fd']);
end.

コマンド (color fd) を 1 つのパラメーターとして渡すことに注意してください。ただし、*nix の場合はこれがより重要です。

于 2012-12-30T21:15:10.213 に答える
0

system()プラットフォーム固有のコマンドライン プロセッサを呼び出します。たとえば、Windows では、invokeのsystem("command")呼び出しで、はWindows のバージョンに応じてまたはのいずれかになります。CreateProcess()%COMSPEC% /C "command"%COMSPEC%command.comcmd.exe

于 2012-12-30T17:32:01.720 に答える