プロセス

プロセス

ACETUTIL関数
(acet-sys-procid)
AutoCAD 自身のプロセス ID を返します。
戻り値:整数

acet-sys-procid 関数は、WIndows 上での AutoCAD 自身のプロセス ID を返します。

_$ (acet-sys-procid)⏎
3428

外部 ObjectARX アプリケーションによる関数 EXRXSUBR です。

ACETUTIL関数
(acet-sys-sleep millisecs)
millisecs:整数
AutoLISP プログラムを、指定した時間スリープさせます。
戻り値:nil

acet-sys-sleep 関数は、AutoLISP プログラムを、指定した時間スリープさせます。

millisecs 引数は、停止する時間をミリ秒単位で指定します。1秒停止するためには 1000 を指定します。

_$ (acet-sys-sleep 1000)⏎
nil

単純な時間経過を計るループに対して、acet-sys-sleep 関数は、スリープ中も CPU リソースを消費しません。

外部 ObjectARX アプリケーションによる関数 EXRXSUBR です。

外部アプリケーションの起動

ACETUTIL関数
(acet-filename-associated-app filename)
filename:文字列
ファイルと関連づけられたアプリケーションのパスを返します。

戻り値:文字列、または nil

acet-filename-associated-app 関数は、与えられたファイルと関連づけられたアプリケーションを、Windowsのレジストリから読み取って返します。

filename 引数は、調べるファイル名を指定しますが、この関数の場合は拡張子が判別できればよく、ファイルの実際の存在は問いません。

_$ (acet-filename-associated-app "abc.jpg")⏎
"C:¥¥WINDOWS¥¥SYSTEM32¥¥RUNDLL32.EXE"

関連づけられたアプリケーションが無い場合は、nil を返します。

ACETUTIL関数
(acet-sys-command shell-command)
shell-command:文字列
Windows コマンドプロンプトから、コマンドを実行します。
戻り値:整数

acet-sys-command 関数は、Windows 【コマンドプロンプト】から、コマンドを実行します。

shell-command 引数には、シェルに渡すコマンドの文字列を指定します。

戻り値は、コマンドの EXIT CODE を表す整数が返ります。エラーの場合は -1 を返します。返るタイミングは【コマンドプロンプト】が終了した時で、それまで AutoCAD は待機します。

次の例は、【コマンドプロンプト】を開いて、現在のワーキングディレクトリの内容を表示します。シェルのコマンドは実行後、直ちに終了しますので、この場合は "pause" コマンドを付加して一時停止して結果を表示しています。

_$ (acet-sys-command "dir&pause")⏎
0

次の例は、【コマンドプロンプト】を経由して【メモ帳】で AutoCAD の acad.pgp ファイルを開きます。

_$ (acet-sys-command (strcat "notepad " (findfile"acad.pgp")))⏎
0

外部 ObjectARX アプリケーションによる関数 EXRXSUBR です。

AutoLISP関数
(startapp os-cmd [options])
os-cmd:文字列
options:文字列
Windows アプリケーションを起動します。
戻り値:整数、または nil

startapp 関数は、Windows アプリケーションを起動します。

os-cmd 引数はアプリケーションファイル名を指定しますが、拡張子 exe は省略できます。

戻り値は、関数実行後直ちに返ります。アプリケーションの起動が成功したときは 0 より大きな整数が、失敗した場合は nil が返ります。起動したアプリケーションは、AutoCADのプロセスとは別となり、ユーザー自身がアプリケーションを終了させます。

次の例は、Windows の【電卓】を起動します。

_$ (startapp "calc")⏎
33

options 引数は、Windows アプリケーションに渡す起動オプションを指定します。

次の例は、【コマンドプロンプト】を開いて、現在のワーキングディレクトリの内容を表示します。

_$ (startapp "cmd" "/K dir")⏎
33

なお、起動オプションの作法により、ファイル名に空白スペースを含むときは“(ダブルクォーテーション)で囲む必要があります。

次は、【メモ帳】にファイル名を指定して開く例です。

_$ (startapp "notepad" "¥"d:¥my secret file.txt¥"")⏎
33

startapp 関数から起動したプログラムは実行中の AutoLISP のプログラムとは別プロセスで実行されます。そのため、外部プログラムの実行終了を待つことなく AutoLISP のプログラムは先に進みます。

startapp 関数は AutoLISP の標準関数のように見えて実は外部 ObjectARX アプリケーションの関数 EXRXSUBR として提供されています。【独自の名前空間 VLX アプリケーション】を作成すると、そこからは EXRXSUBR は特別に宣言しないと使えません。「(vl-arx-import 'startapp)」という宣言をコードの中に加えてください。

ACETUTIL関数
(acet-sys-spawn flags os-cmd [arg1 [arg2 ...]])
flags:整数
os-cmd:文字列
arg1 arg2... :文字列
Windows アプリケーションを起動します。
戻り値:整数

acet-sys-spawn 関数は、Windows アプリケーションを起動します。

flags 引数は、アプリケーションの起動モードを整数で指定します。何もモードを指定しない場合は 0 とします。モードは次の値の和を指定します。

flags 説明
1 起動したアプリケーションが終了するまで待ちます。
2 アプリケーションウィンドウを最小化して起動します。

os-cmd 引数はアプリケーションファイル名を指定しますが、拡張子 exe は省略できます。

arg1 arg2 引数は、アプリケーションに渡すオプションを文字列で指定します。

flags 引数で 1 が指定されていない場合は、関数は直ちに終了して、起動したアプリケーションのプロセス ID を返します。ここで得たプロセス ID は、acet-sys-wait 関数や acet-sys-term 関数で利用できます。

flags 引数で 1 が指定されていた場合は、関数はアプリケーションが終了するまで待ちます。この場合、関数の戻り値は アプリケーションの EXIT CODE になります。

次の例は、【メモ帳】で AutoCAD の acad.pgp ファイルを開き、【メモ帳】が終了するまで待ちます。

_$ (acet-sys-spawn 1 "notepad" (findfile "acad.pgp"))⏎
0

上の例は、【メモ帳】が終了するまで acet-sys-spawn 関数は終了しません。そしてユーザーの手によって【メモ帳】が終了されると、EXIT CODE が戻ります。

外部 ObjectARX アプリケーションによる関数 EXRXSUBR です。

ACETUTIL関数
(acet-sys-wait pid [timeout])
pid:整数
timeout:整数
アプリケーションが終了するのを待ちます。
戻り値:整数

acet-sys-wait 関数は、アプリケーションが終了するのを待ちます。

pid 引数には、対象アプリケーションのプロセス ID を指定します。

timeout 引数が指定された場合は、指定された間を最大限として待ちます。単位はミリ秒で、1秒は1000になります。

戻り値は、アプリケーションが時間内に終了した場合は EXIT CODE の整数が、エラーが発生したり、タイムアウトだった場合は -1 が返ります。

次の例は、【メモ帳】で AutoCAD の acad.pgp ファイルを開き、5秒間【メモ帳】が終了するのを待ちます。

_$ (setq pid (acet-sys-spawn 0 "notepad" (findfile "acad.pgp")))⏎
6048
_$ (acet-sys-wait pid 5000)⏎
0

上の例は、5秒以内に【メモ帳】が終了されたので、EXIT CODE が戻っています。

外部 ObjectARX アプリケーションによる関数 EXRXSUBR です。

ACETUTIL関数
(acet-sys-term pid)
pid:整数
アプリケーションを強制終了します。
戻り値:nil、または nil 以外

acet-sys-term 関数は、アプリケーションを終了させます。

pid 引数には、対象アプリケーションのプロセス ID を指定します。

戻り値は、終了が成功すれば nil 以外、失敗した場合は nil が返ります。

次の例は、【メモ帳】で AutoCAD の acad.pgp ファイルを開き、その後、終了させています。

外部 ObjectARX アプリケーションによる関数 EXRXSUBR です。

_$ (setq pid (acet-sys-spawn 0 "notepad" (findfile "acad.pgp")))⏎
1872
_$ (acet-sys-term pid)⏎
T

環境変数

AutoLISP関数
(getenv varname)
varname:文字列
環境変数に設定されている文字列値を返します。
戻り値:文字列、またはnil
AutoLISP関数
(setenv varname value)
varname:文字列
value:文字列
指定された値を環境変数に代入します。
戻り値:文字列

これらの関数は、OS が提供管理している環境変数にアクセスします。

getenv 関数は、環境変数の値を返します。setenv 関数は、環境変数に値を代入します。

vername 引数は、調べる環境変数を文字列で指定します。

value 引数は、環境変数にセットする値を文字列で指定します。

戻り値は、セットした、または調べた環境変数の値が文字列で返ります。

_$ (setenv "myargment01" "test")⏎
"test"
_$ (getenv "myargment01")⏎
"test"

なお、これらの環境変数の変更は、既存の環境変数を含めてOS が今のAutoCAD に提供している環境のみに影響しますので、他の Windows アプリケーションの動作には今後とも影響を与えません。さらに、AutoCAD から起動したアプリケーションに提供される環境変数にも引継ぎされません。

例えば、setenv 関数で環境変数を変更して、startapp 関数で【コマンドプロンプト】を実行しても、そこでは変更した環境変数は反映されません。