Site Index - Feedback - Impressum |
| |||||||||
|
|
( Archiv ) | ( Neues Thema ) |
( Zeige die Threadübersicht ) | ( Zur Startübersicht ) |
14.07.2000 |
REXX: Wie ObjectID von bestehendem Dateiordner ermitteln? (von: Thomas Kämmerer, 16:01:07) | ^ |
Ich möchte in einem REXX-Skript ein Referenzobject von einem bestehenden Unterverzeichnis erstellen. Beim Aufruf von SysCreateObject brauche ich bei den Optionen die ObjectID des Verzeichnisses; doch woher nehmen? Oder bin ich auf dem völlig falschen Weg?!
[ Leser: 48 ] |
Re: REXX: Wie ObjectID von bestehendem Dateiordner ermitteln? (von: Thomas Nolte, 19:04:30) | |
Lt. OS/2 REXX Referenzhandbuch kann entweder die Objekt-ID oder der Systempfad angegeben werden. |
Re: REXX: Wie ObjectID von bestehendem Dateiordner ermitteln? (von: Andreas Schnellbacher, 20:54:13) | |
Moin Thomas,
Du brauchst fuer SysCreateObject (oder einfacher mit: SysSetObjectData) nicht unbedingt die ObjectID. Du kannst auch den vollst. Pfadnamen angeben. Die ObjectID ist nur fuer abstrakte Objekte (z.B. Programmobjekte), nicht aber Dateiobjekte erforderlich. Ich empfehle Dir die hervorragende REXX-Dokumentation bzw. -Ergaenzung zu den Ori-Warp4-REXX- und OS/2-Inf-Dateien: REXX Tips & Tricks 3.0 (Gibt's bestimmt auf Hobbes oder Leo als rxtt30.zip). Zusaetzlich brauchst Du zum Abfragen der aktuellen Objekteinstellungen wptools.dll aus WPTools 3.2 (wptool32.zip) von Henk Kelder. Die Objekteinstellungen (auch die ObjectID) zeigt auch XWorkplace an. Fuer Programmobjekte kannst Du ObjectIDs bequem mit DragText 3.3 aendern. Hier als Beispiel ein REXX-Script von mir, mit dem man Objekteinstellungen zum spaeteren Zuruecksetzen in eine .cmd-Datei sichern kann (geht auch fuer die Klickstartleiste, sehr zu empfehlen vor Neuinstallation): --- Alle ~ durch Space ersetzen --- /*~Abfragen~von~Objekt-Einstellungen ~~~Parameter~=~Vollständiger~Pfadname~oder ~~~~~~~~~~~~~~~"<OBJECTID>"~oder~^<OBJECTID^>~oder ~~~~~~~~~~~~~~~#OBJECTHANDLE~~(hex) ~~Für~SysCreateObject~darf~title~nicht~gleich~""~sein!!! ~~Abfrage~ob~class~=~SmartCenter~oder~WPLaunchPad~erweitern: ~~In~ini~"user"~unter~Appl~"PM_Workplace:ReplaceList"~suchen~ob~beide~classes ~~Keyw~=~"SmartCenter"~oder~"WPLaunchPad"~ersetzt~worden~sind. ~~To~do: ~~Falls~Ordner~nicht~vorhanden: ~~Pfadname~eingeben~können. */ /*'@mode~co80,40' */ CALL~RxFuncAdd~'SysLoadFuncs',~'RexxUtil',~'SysLoadFuncs' CALL~SysLoadFuncs CALL~RxFuncAdd~'WPToolsLoadFuncs',~'WPTOOLS',~'WPToolsLoadFuncs' CALL~WPToolsLoadFuncs /*~Konfiguration~*/ Show~~~~~~~~~~~~~=~1~~~~~~~~~~/*~0|1~*/ Pause~~~~~~~~~~~~=~0~~~~~~~~~~/*~0|1~*/ WriteCmdFile~~~~~=~'ASK'~~~~~~~~~~/*~0|1|'ASK'~*/ CmdFileOverwrite~=~1~~~~~~/*~0|1|'ASK'~*/ CmdFileDir~=~'' NORMALCOLOR~=~'1b'x~||~'[0m' COLOR1~~~~~~=~'1b'x~||~'[1;32;40m' COLOR2~~~~~~=~'1b'x~||~'[1;36;40m' COLOR3~~~~~~=~'1b'x~||~'[1;31;47m' COLOR4~~~~~~=~'1b'x~||~'[30;47m' COLOR5~~~~~~=~'1b'x~||~'[1;33;44m' say /* parse~arg~args args~=~strip(args) if~left(~args,~1~)~=~'"'~then ~~do ~~~~parse~var~args~'"'~arg1~'"'~rest ~~~~arg1~=~strip(arg1) ~~end~/*~do~*/ else ~~do ~~~~parse~var~args~arg1~rest ~~~~arg1~=~strip(arg1) ~~~~arg1~=~strip(~arg1,~,~'"'~) ~~end~/*~do~*/ */ parse~arg~arg1 arg1~=~strip(arg1) arg1~=~strip(~arg1,~,~'"'~) if~arg1~=~''~then ~~do ~~~~say~'Objekt~eingeben~(Dateiname~oder~<OBJECT_ID>~oder~#HANDLE_IN_HEX):' ~~~~parse~pull~arg1 ~~~~arg1~=~strip(arg1) ~~~~arg1~=~strip(~arg1,~,~'"'~) ~~end~/*~do~*/ if~left(~arg1,~1)~<>~'#'~&~left(~arg1,~1~)~<>~'<'~then ~~do ~~~~call~SysFileTree~arg1,~'Obj',~'DO' ~~~~if~Obj.0~>~0~then ~~~~~~Object~=~Obj.1 ~~~~else ~~~~~~do ~~~~~~~~lp~=~lastpos(~'',~arg1~) ~~~~~~~~ParentDir~=~substr(~arg1,~1,~max(~0,~lp~-~1~)~) ~~~~~~~~call~SysFileTree~ParentDir'*',~'SearchObj',~'O' ~~~~~~~~do~s~=~1~to~SearchObj.0 ~~~~~~~~~~/*say~s'~~'SearchObj.s*/ ~~~~~~~~~~/*cSearchObj~=~translate(~SearchObj.s,~'',~'^'~)*/ ~~~~~~~~~~cSearchObj~=~replace_str(~SearchObj.s,~'',~'^'~) ~~~~~~~~~~/*say~'~~~'cSearchDir*/ ~~~~~~~~~~if~translate(cSearchObj)~=~translate(arg1)~then ~~~~~~~~~~~~do ~~~~~~~~~~~~~~Object~=~SearchObj.s ~~~~~~~~~~~~~~leave ~~~~~~~~~~~~end~/*~do~*/ ~~~~~~~~end~/*~do~s~*/ ~~~~~~end~/*~do~*/ ~~~~/*say~'Object~=~'Object;'@pause'*/ ~~~~arg1~=~Object ~~end~/*~do~*/ rc~=~WPToolsQueryObject(~arg1,~"Class",~"Title",~"Setup",~"Location") if~rc~=~0~then ~~do ~~~~say~'Für~das~Objekt~'arg1 ~~~~say~'sind~keine~Object~Settings~definiert.' ~~~~return ~~end~/*~do~*/ /*~WriteCmdFile~*/ if~symbol('WriteCmdFile')~<>~'VAR'~|~WriteCmdFile~=~''~then ~~WriteCmdFile~=~value(~'WRITECMDFILE',~,~'os2environment'~) if~WriteCmdFile~=~''~then ~~WriteCmdFile~=~'ASK'~~~~/*~0|1|'ASK'~*/ /*~CmdFileDir~*/ if~symbol('CmdFileDir')~<>~'VAR'~|~CmdFileDir~=~''~then ~~CmdFileDir~=~directory(arg1) if~CmdFileDir~=~''~then ~~CmdFileDir~=~value(~'CMDFILEDIR',~,~'os2environment'~) if~CmdFileDir~=~''~then ~~CmdFileDir~=~directory(~strip(~arg1,~'t',~''~)'..'~) if~CmdFileDir~=~''~then ~~CmdFileDir~=~directory() /*~CmdFileOverwrite~*/ if~symbol('CmdFileOverwrite')~<>~'VAR'~|~CmdFileOverwrite~=~''~then ~~CmdFileOverwrite~=~value(~'CMDFILEOVERWRITE',~,~'os2environment'~) if~CmdFileOverwrite~=~''~then ~~CmdFileOverwrite~=~'ASK'~~~~/*~0|1|'ASK'~*/ if~Show~=~1~then ~~do ~~~~say~'C~L~A~S~S' ~~~~say~Class ~~~~say~'T~I~T~L~E' ~~~~say~color5||Title||normalcolor ~~~~say~'L~O~C~A~T~I~O~N' ~~~~say~Location ~~~~say~'S~E~T~U~P' ~~~~say~setup ~~~~if~Pause~=~1~then ~~~~~~do ~~~~~~~~say ~~~~~~~~'@pause' ~~~~~~end~/*~do~*/ ~~end~/*~do~*/ if~Title~=~''~then Title~=~filespec(~'NAME',~arg1~) ConvTitle~=~Title ConvTitle~=~translate(~ConvTitle,~'_',~'.'~) ConvTitle~=~translate(~ConvTitle,~'_',~'~'~) ConvTitle~=~translate(~ConvTitle,~'!',~':'~) ConvTitle~=~translate(~ConvTitle,~'!',~'/'~) ConvTitle~=~translate(~ConvTitle,~'!',~'0a'x~) ConvTitle~=~translate(~ConvTitle,~'!',~'0d'x~) ConvTitle~=~translate(~ConvTitle,~'!',~'<'~) ConvTitle~=~translate(~ConvTitle,~'!',~'>'~) CmdFile~=~strip(~CmdFileDir,~'t',~''~)'set_'ConvTitle'.cmd' say select ~~when~WriteCmdFile~=~0~then ~~~~return ~~when~WriteCmdFile~=~1~then ~~~~do ~~~~~~say~'Name~für~CMD-Datei~zum~Setzen~der~Einstellungen:' ~~~~~~say~'~~~~~set_'ConvTitle'.cmd' ~~~~~~say~'~~~~~im~Verzeichnis~'CmdFileDir ~~~~end~/*~do~*/ otherwise ~~do ~~~~say~'Name~für~CMD-Datei~zum~Setzen~der~Einstellungen~angeben~oder:' ~~~~say~'~~~~~X+Return~->~keine~CMD-Datei~erzeugen' ~~~~say~'~~~~~Return~~~->~Name~=~set_'ConvTitle'.cmd' ~~~~say~'~~~~~~~~~~~~~~~~~im~Verzeichnis~'CmdFileDir ~~~~parse~pull~answer ~~~~answer~=~strip(answer) ~~~~select ~~~~~~when~translate(answer)~=~'X'~then ~~~~~~~~return ~~~~~~when~answer~=~''~then ~~~~~~~~nop ~~~~otherwise ~~~~~~CmdFile~=~answer ~~~~end~~/*~select~*/ ~~end~/*~do~*/ end~/*~select~*/ do~forever ~~if~stream(~CmdFile,~'C',~'QUERY~EXISTS'~)~<>~''~then ~~~~exist~=~1 ~~else ~~~~exist~=~0 ~~if~exist~=~1~then ~~~~do ~~~~~~select ~~~~~~~~when~CmdFileOverwrite~=~0~then ~~~~~~~~~~return ~~~~~~~~when~CmdFileOverwrite~=~1~then ~~~~~~~~~~leave ~~~~~~otherwise ~~~~~~~~say~cmdfile'~existiert~bereits!' ~~~~~~~~say~'Anderen~Namen~angeben~oder:' ~~~~~~~~say~'~~~~~X+Return~->~keine~CMD-Datei~erzeugen' ~~~~~~~~say~'~~~~~Return~~~->~Überschreiben' ~~~~~~~~parse~pull~answer ~~~~~~~~answer~=~strip(answer) ~~~~~~~~select ~~~~~~~~~~when~translate(answer)~=~'X'~then ~~~~~~~~~~~~return ~~~~~~~~~~when~answer~=~''~then ~~~~~~~~~~~~leave ~~~~~~~~otherwise ~~~~~~~~~~CmdFile~=~answer ~~~~~~~~end~~/*~select~*/ ~~~~~~end~~/*~select~*/ ~~~~end~/*~do~*/ ~~else ~~~~leave end~/*~do~forever~*/ if~exist~=~1~then ~~call~SysFileDelete~CmdFile call~lineout~cmdfile,~'/*~Einstellungen~setzen~für~'arg1'~*/' call~lineout~cmdfile,~'' call~lineout~cmdfile,~'' call~lineout~cmdfile,~'CALL~RxFuncAdd~"SysLoadFuncs",~"RexxUtil",~"SysLoadFuncs"' call~lineout~cmdfile,~'CALL~SysLoadFuncs' call~lineout~cmdfile,~'' call~lineout~cmdfile,~'say' call~lineout~cmdfile,~'say~"Einstellungen~setzen~für~'Class'~»'Title'«"' call~lineout~cmdfile,~'' call~lineout~cmdfile,~'class~~~~=~"'Class'"' call~lineout~cmdfile,~'' Title2~=~Title if~Title2~=~""~then ~~Title2~=~filespec('name',~arg1) call~lineout~cmdfile,~'title~~~~=~"'Title2'"' call~lineout~cmdfile,~'' call~lineout~cmdfile,~'location~=~"'Location'"' call~lineout~cmdfile,~'do~forever' call~lineout~cmdfile,~'~~say~"***~In~welchem~Ordner~soll~das~Objekt~erstellt~werden?"' call~lineout~cmdfile,~'~~say~"~~~~(Return~=~"location",~X~=~Abbruch)"' call~lineout~cmdfile,~'~~parse~pull~newloc' call~lineout~cmdfile,~'~~newloc~=~strip(newloc)' call~lineout~cmdfile,~'~~if~translate(newloc)~=~"X"~then' call~lineout~cmdfile,~'~~~~return' call~lineout~cmdfile,~'~~if~newloc~<>~""~then' call~lineout~cmdfile,~'~~~~location~=~newloc' call~lineout~cmdfile,~'~~if~ExistObj(~location~)~=~1~then' call~lineout~cmdfile,~'~~~~leave' call~lineout~cmdfile,~'~~else' call~lineout~cmdfile,~'~~~~do' call~lineout~cmdfile,~'~~~~~~say~"~~~~Der~Ordner~"location"~existiert~nicht!"' /* call~lineout~cmdfile,~'~~~~~~say~"~~~~Soll~er~erstellt~werden?~(j/n)"' call~lineout~cmdfile,~'~~~~~~parse~pull~answer' */ call~lineout~cmdfile,~'~~~~end~/*~do~*/' call~lineout~cmdfile,~'end~/*~do~forever~*/' call~lineout~cmdfile,~'' s~=~0 smax~=~0 Rest~=~Setup do~forever ~~sp1~=~pos(~'DRAWEROBJECTS=',~Rest~~) ~~if~sp1~=~0~then ~~~~leave ~~sp2~=~pos(~';',~Rest,~sp1~+~1~) ~~len~=~sp2~-~sp1~+~1 ~~s~=~s~+~1 ~~smax~=~s ~~Setup.s~=~substr(~Rest,~sp1,~len~) ~~Rest~=~delstr(~Rest,~sp1,~len~) end~/*~do~forever~*/ Setup.0~=~Rest do~s~=~0~to~smax ~~SetupLines~=~SplitSetupAtSemicolons(~Setup.s~) ~~/*say~SetupLines*/ ~~call~lineout~cmdfile,~'setup.'s'~=~,' ~~call~lineout~cmdfile,~SetupLines ~~call~lineout~cmdfile,~'' end~/*~do~s~*/ call~lineout~cmdfile,~'smax~=~'smax call~lineout~cmdfile,~'if~class~=~"WPLaunchPad"~then' call~lineout~cmdfile,~'~~orinames~=~"FPOBJECTS=~DRAWEROBJECTS="' call~lineout~cmdfile,~'else' call~lineout~cmdfile,~'~~orinames~=~"EXENAME=~SHADOWID=~STARTUPDIR="' call~lineout~cmdfile,~'' call~lineout~cmdfile,~'do~s~=~0~to~smax' call~lineout~cmdfile,~'' call~lineout~cmdfile,~'~~setup~=~setup.s' call~lineout~cmdfile,~'' call~lineout~cmdfile,~'~~do~n~=~1~to~words(~orinames~)' call~lineout~cmdfile,~'~~~~oriname~=~word(~orinames,~n~)' call~lineout~cmdfile,~'~~~~p1~=~pos(~oriname,~setup~)' call~lineout~cmdfile,~'~~~~if~p1~=~0~then' call~lineout~cmdfile,~'~~~~~~iterate~n' call~lineout~cmdfile,~'~~~~p2~=~p1~+~length(oriname)' call~lineout~cmdfile,~'~~~~if~oriname~=~"DRAWEROBJECTS="~then' call~lineout~cmdfile,~'~~~~~~p2~=~pos(~",",~setup,~p2~+~1~)~+~1' call~lineout~cmdfile,~'~~~~p3~=~pos(~";",~setup,~p2~+~1~)' call~lineout~cmdfile,~'~~~~objstring~=~substr(~setup,~p2,~max(~0,~p3~-~p2~)~)' call~lineout~cmdfile,~'~~~~newobjstring~=~""' call~lineout~cmdfile,~'~~~~rest~=~objstring' call~lineout~cmdfile,~'~~~~do~until~rest~=~""' call~lineout~cmdfile,~'~~~~~~startp~=~length(objstring)~-~length(~rest~)' call~lineout~cmdfile,~'~~~~~~parse~var~rest~oriobj","rest' call~lineout~cmdfile,~'~~~~~~neworiobj~=~oriobj' call~lineout~cmdfile,~'~~~~~~do~while~ExistObj(~neworiobj~)~=~0' call~lineout~cmdfile,~'~~~~~~~~say~"~~~~"oriname""objstring' call~lineout~cmdfile,~'~~~~~~~~neworiobj~=~GetNotExistAnswer(~neworiobj~)' call~lineout~cmdfile,~'~~~~~~end~/*~do~while~*/' call~lineout~cmdfile,~'~~~~~~if~newobjstring~=~""~then' call~lineout~cmdfile,~'~~~~~~~~newobjstring~=~neworiobj' call~lineout~cmdfile,~'~~~~~~else' call~lineout~cmdfile,~'~~~~~~~~newobjstring~=~newobjstring","neworiobj' call~lineout~cmdfile,~'~~~~end~/*~do~until~*/' call~lineout~cmdfile,~'~~~~newsetup~=~delstr(~setup,~p2,~max(~0,~p3-p2~)~)' call~lineout~cmdfile,~'~~~~newsetup~=~insert(~newobjstring,~newsetup,~p2-1~)' call~lineout~cmdfile,~'~~~~setup~=~newsetup' call~lineout~cmdfile,~'~~end~/*~do~n~*/' call~lineout~cmdfile,~'' call~lineout~cmdfile,~'~~/*if~s~=~0~&~(~class~=~"WPLaunchPad"~|~class~=~"SmartCenter"~)~then'*/ call~lineout~cmdfile,~'~~if~s~=~0~&~(~class~=~"WPLaunchPad"~)~then' call~lineout~cmdfile,~'~~~~updatereplace~=~"r"' call~lineout~cmdfile,~'~~else' call~lineout~cmdfile,~'~~~~updatereplace~=~"u"' call~lineout~cmdfile,~'~~retcode~=~SysCreateObject(~class,~title,~location,~setup,~updatereplace~)' call~lineout~cmdfile,~'~~if~retcode~then~say~"OK!"' call~lineout~cmdfile,~'~~else~say~"Fehler!"' call~lineout~cmdfile,~'' call~lineout~cmdfile,~'end~/*~do~s~*/' call~lineout~cmdfile,~'' call~lineout~cmdfile,~'return~retcode' call~lineout~cmdfile,~'' call~lineout~cmdfile,~'' call~lineout~cmdfile,~'ExistObj:~~procedure' call~lineout~cmdfile,~'~~Obj~=~arg(1)' call~lineout~cmdfile,~'~~if~Obj~=~""~then' call~lineout~cmdfile,~'~~~~ExistRC~=~0' call~lineout~cmdfile,~'~~else' call~lineout~cmdfile,~'~~~~ExistRC~=~SysSetObjectData(~Obj,~""~)' call~lineout~cmdfile,~'~~if~ExistRC~=~0~then' call~lineout~cmdfile,~'~~~~ExistRC~=~(~SysSearchPath(~"PATH",~Obj~)~<>~""~)' call~lineout~cmdfile,~'return~ExistRC' call~lineout~cmdfile,~'' call~lineout~cmdfile,~'' call~lineout~cmdfile,~'GetNotExistAnswer:~~procedure' call~lineout~cmdfile,~'~~neworiobj~=~arg(1)' call~lineout~cmdfile,~'~~say~"***~Das~Objekt~"neworiobj"~existiert~nicht!"' call~lineout~cmdfile,~'~~say~"~~~~Neues~Objekt~eingeben:"' call~lineout~cmdfile,~'~~say~"~~~~(<OBJECTID>~oder~Dateinamen,~X~=~Abbruch,~K~=~keins,"' call~lineout~cmdfile,~'~~say~"~~~~Return~=~"neworiobj")"' call~lineout~cmdfile,~'~~parse~pull~answer' call~lineout~cmdfile,~'~~answer~=~strip(answer)' call~lineout~cmdfile,~'~~select' call~lineout~cmdfile,~'~~~~when~translate(answer)~=~"X"~then' call~lineout~cmdfile,~'~~~~~~return' call~lineout~cmdfile,~'~~~~when~translate(answer)~=~"K"~then' call~lineout~cmdfile,~'~~~~~~do~' call~lineout~cmdfile,~'~~~~~~~~neworiobj~=~""' call~lineout~cmdfile,~'~~~~~~~~leave' call~lineout~cmdfile,~'~~~~~~end~/*~do~*/' call~lineout~cmdfile,~'~~~~when~translate(answer)~=~""~then' call~lineout~cmdfile,~'~~~~~~leave' call~lineout~cmdfile,~'~~otherwise' call~lineout~cmdfile,~'~~~~neworiobj~=~answer' call~lineout~cmdfile,~'~~end~/*~select~*/' call~lineout~cmdfile,~'return~neworiobj' call~lineout~cmdfile,~'' call~stream~cmdfile,~'c',~'close' return SplitSetupAtSemicolons:~procedure /*****************************************************************************/ parse~arg~String i~=~0 CRLF~=~'0d0a'x SetupLines~=~'' do~until~String~=~'' ~~i~=~i~+~1 ~~parse~var~String~StringPart.i~';'~String ~~StringPart.i~=~strip(StringPart.i) ~~StringPart.0~=~i end do~j~=~1~to~StringPart.0 ~~SetupLines~=~SetupLines'"'StringPart.j';"' ~~if~j~<>~StringPart.0~then ~~~~SetupLines~=~SetupLines'~||,'CRLF end /* rest~=~String do~while~rest~<>~'' ~~parse~var~rest~next~';'~rest ~~if~length(next)~>~250~then ~~~~do ~~~~~~rrest~=~next ~~~~~~do~while~rrest~<>~'' ~~~~~~~~lp~=~lastpos(~',',~rrest,~250~) ~~~~~~~~if~lp~=~0~then ~~~~~~~~~~lp~=~250 ~~~~~~~~SetupLines~=~SetupLines'"'substr(~rrest,~1,~lp~)'"~||,~'CRLF ~~~~~~end~/*~do~while~*/ ~~~~end~/*~do~*/ ~~i~=~i~+~1 end~/*~do~while~*/ */ return~SetupLines /*~String~(Zeichenkette)~in~einem~String~(z.B.~Zeile)~ersetzen,~auch~mehrfach~*/ /*~arg(1)~bis~arg(3)~wie~translate~*/ /*~defproc~replace_str(from_str,~to_str,~source_str)~*/ replace_str:~~procedure /*****************************************************************************/ ~~~source_str~=~arg(1) ~~~to_str~~~~~=~arg(2) ~~~from_str~~~=~arg(3) ~~~do~forever ~~~~~~p~=~pos(from_str,~source_str) ~~~~~~if~p~=~0~then~leave ~~~~~~source_str=insert(to_str,~delstr(source_str,~p,~length(from_str)),~p-1) ~~~end~/*~do~*/ ~~~return~source_str |
( Zeige die Threadübersicht ) | [ Version zum Drucken ] | ( Zur Startübersicht ) |
|
Mit * markierte Felder müssen ausgefüllt werden ! |
|