Site Index - Feedback - Impressum |
| |||||||||
|
|
( Archiv ) | ( Neues Thema ) |
14.07.2000 |
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 [ Leser: 40 ] |
|
Mit * markierte Felder müssen ausgefüllt werden ! |
( Zeige alle Einträge ) | ( Zur Startübersicht ) |
|
| Thomas Kämmerer | 48 | 14.07.2000 | 16:01 |
| Thomas Nolte | 44 | 14.07.2000 | 19:04 |
| Andreas Schnellbacher | 40 | 14.07.2000 | 20:54 |
|