†REXXのどろぬま†

オブジェクトを作成する:SysCreateObject

作成開始日 2022.01.18
最終更新日 2022.01.18

WPSの不具合の主たる原因はOS2.INIの破損。酷いときはWPSが全く起動しなくなる。そうなると、MAKEINIコマンドでOS2.INI/OS2SYS.INIを再作成することになるのだが、それをやると、デスクトップ上や各フォルダ内のプログラム・オブジェクト(アイコン)が大量に消失してしまう。基本システムに登録してあるもの(INI.RC参照)は再作成されるが、拡張機能や個々のアプリケーションが作成したプログラム・アイコンは軒並み消えてしまう。

SysCreateObjectの基本

こういう時に備えて、必要なプログラム・オブジェクトを再作成するスクリプトを用意しておくと便利。プログラム・オブジェクトの作成にはRexxUtilの「SysCreateObject」関数を使用する。SysCreateObjectの基本構文の下記のようなものだが、実はけっこう注意が必要。
rc = SysCreateObject(WPクラス, オブジェクト名, 作成場所, <設定>, <オプション>);
留意点1:引数の数とカンマ

引数の数は5個で、最初の3個は必須、後の2個は省略可能。ただし、省略した場合も引数区切りの「,」は必須

○ rc = SysCreateObject('WPProgram','MyProg','<WP_DESKTOP>',,);
× rc = SysCreateObject('WPProgram','MyProg','<WP_DESKTOP>');	※エラーになる

留意点2:設定の本体は第4引数

プログラム・オブジェクトの設定のキモは第4引数の<設定>。省略可能だからと言って軽く考えていけない。しかも、これがけっこう面倒な仕様になっていてREXXの知識だけでは全然判らない。詳細はWorkplace Shell Programming Refernce(wps1.inf)を参照。

各引数の意味

@WPクラス
作成するオブジェクトのクラスを指定する。プログラムなら「WPProgram」、フォルダなら「WPFolder」と言った感じ。ここではプログラム・オブジェクトの作成を考えているので「WPProgram」で良い。

Aオブジェクト名
そのプログラム・オブジェクトの名称。任意の文字列で良い。

B作成場所
そのプログラム・オブジェクトを作成する場所。「D:\MYWORK」のようにフルパスで指定しても良いが、「<WP_DESKTOP>」(デスクトップ)や「<WP_STARTUP>」(始動フォルダ)のようにオブジェクトIDを指定しても良い。実験段階では「<WP_DESKTOP>」を推奨。

C設定:次項参照

Dオプション
同じ場所に同名のオブジェクトが既に存在している場合の処理の指定。'U'=更新/'R'=置換/'F'=なにもしない。

<設定>に指定するパラメータ

基本的に、プログラム・オブジェクトの[プロパティ|プログラム(P)]ダイアログに相当する。その他[セッション(S)]や[アイコン(I)]のページに相当する設定も可能。下記以外にも多くの設定項目があるが、ここではいちいち取り上げない。詳細はWorkplace Shell Programming Referance 1(wps1.inf)を参照。

項目名設定名用 例備 考
パスおよびファイル名EXENAMEEXENAME=C:\OS2\E.EXEプログラム名
パラメーターPARAMETERSPARAMETERS=C:\README.TXTコマンドライン引数
作業ディレクトリーSTARTUPDIRSTARTUPDIR=C:\カレント・ディレクトリ

セッションPROGTYPEPROGTYPE=PM PM/VIO
アイコンICONFILEICONFILE=C:\MYICON.ICO
オブジェクトIDOBJECTIDOBJECTID=<MYPROG>
オブジェクトのオープン操作CCVIEWCCVIEW=YESYES/NO/DEFAULT

これらの設定文字列を「;」で繋げて<設定>に指定する。例えば、プログラム(d:\myprog.exe)と引数(d:\mydata.dat)を指定する場合は次のようになる。ほとんど最少限の指定なのだが、随分と長たらしくなる。設定文字列を適当な変数に入れて可読性を高めないとデバグが大変だ。

rc = SysCreat('WPProgram','MyProg','<WP_DESKTOP>','EXENAME=D:\MYPROG.EXE;PARAMETERS=
D:\MYDATA.DAT','R');

使用例

一括登録:特定のディレクトリ内の全てのEXEファイルのオブジェクトを作成する;
下記の例では、C:\WX3OS2内の全てのEXEファイルのオブジェクトを、デスクトップ上に作成している。その際、オブジェクト名として、ファイル名(拡張子を除く)を使用している。

rc=sysFileTree('C:\WX3OS2\*.EXE',exefile,'FO');
Do n=1 to exefile.0
  st=filespec('n',exefile.n);
  parse var st objname '.' ext;
  say objname;
  exe='exename='||exefile.n;
  rc = SysCreateObject('WPProgram', objname, '<WP_DESKTOP>', exe, 'R');
End

データファイル登録:データのように見えるプログラム・オブジェクトを作成する;
以下の例では、View(INF表示プログラム)の引数としてC:\BOOKS2\WPS1.INFを指定しているが、作成されたオブジェトは、あたかもINFファイルのオブジェクトのように見える。

obj='Workpalce Shell Programming Reference 1'
exe='exename=c:\os2\view.exe;'
prm='parameters=c:\books2\wps1.inf;'

rc=SysCreateObject('WPProgram',obj,'<WP_DESKTOP>',exe||prm,'R');


【REXXのどろぬま目次】 【ホーム】