8,330
edits
Paradox-01 (talk | contribs) (read registry with forced 64/32-bit path) |
Paradox-01 (talk | contribs) (beginner infos, run other progs) |
||
Line 1: | Line 1: | ||
== | ==Information for novices== | ||
* '''open the Script Editor: [Alt] + [4]''' | |||
* '''run the current code in the Script Editor window: [F5]''' | |||
* clear the log: Edit > Clear History Log | |||
* Actions from button embedded code will be logged. | |||
* Actions from code files that are linked in a button won't be logged. (This results in a performance boost.) | |||
* Logged stuff will be rewritten if you change the script language. (File > Preferences...) | |||
* You can also change the language by right-click the white script box and click on "Set to JScript" or "Set to VBScript". | |||
* Python can be added as script language if you install it on your PC. | |||
* Right-clicking the white script box gives you also access to a few code piece, e.g. "Syntax Help" > "If..Else" or "Catch Error". | |||
* Mark code you want to disable ("Comment Out") or enable ("Comment Remove"). | |||
* You can save your code to a file via "File" > "Save As..." or "Save Selection" | |||
'''Links''' | |||
* [http://softimage.wiki.softimage.com/index.php?title=Scripting_Tips_and_Tricks_%28XSISDK%29 xsi wiki page about scripting] | |||
* '''[http://softimage.wiki.softimage.com/sdkdocs/scriptsdb/scriptsdb/scrdb_vbscript.htm many vbscript examples]''' | |||
* '''[http://ss64.com/vb/ vbs commands]''' | |||
* [http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/filesfolders/files/ objFSO/objWSHShell: Scripts to manage Files] (replace "Wscript.Echo" with "logmessage") | |||
* [http://activexperts.com/activmonitor/windowsmanagement/adminscripts/other/textfiles/ objFSO/objWSHShell: Scripts to manage Text Files] | |||
* [http://www.kxcad.net/Softimage_XSI/Softimage_XSI_Documentation/script_basics_IncludingExternalScripts.htm using external scripts] | |||
* [http://download.autodesk.com/global/docs/softimage2013/en_us/sdkguide/index.html?url=si_om/XSIUIToolkit.html,topicNumber=si_om_XSIUIToolkit_html progress bar and open file dialog<!-- (hm, InitialDirectory code for quick save idea ?)-->] | |||
<!--* [http://download.autodesk.com/global/docs/softimage2013/en_us/sdkguide/index.html?url=files/cus_ppg_FileBrowserWidget.htm,topicNumber=d30e11980,hash=WS34BA39B437A993419C80CAB58E3BEFA1-0059 text box]--> | |||
==General stuff== | |||
===Variables=== | ===Variables=== | ||
Line 159: | Line 183: | ||
==Build an vbs executable== | ===Build an vbs executable=== | ||
[[Image:VbsEdit_for_scripting_and_compiling.png|thumb]] | [[Image:VbsEdit_for_scripting_and_compiling.png|thumb]] | ||
Executable, app(lication), program. Whatever you call it, sometimes it might be necessary to compile the script into an actual program. | Executable, app(lication), program. Whatever you call it, sometimes it might be necessary to compile the script into an actual program. | ||
Line 170: | Line 194: | ||
==OS bitness== | ===OS bitness=== | ||
if GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'").AddressWidth = 64 then | if GetObject("winmgmts:root\cimv2:Win32_Processor='cpu0'").AddressWidth = 64 then | ||
logmessage "64" | logmessage "64" | ||
Line 186: | Line 210: | ||
==XSI/Softimage bitness, version and license== | ===XSI/Softimage bitness, version and license=== | ||
There are three possibilities to detect the program's bitness: | There are three possibilities to detect the program's bitness: | ||
Line 219: | Line 243: | ||
==Read registry== | ===Read registry=== | ||
This reads the registry with forced 64/32-bit path (RegType). In this example Oni's install location gets revealed. | This reads the registry with forced 64/32-bit path (RegType). In this example Oni's install location gets revealed. | ||
Line 258: | Line 282: | ||
ReadRegStr = oOutParams.sValue | ReadRegStr = oOutParams.sValue | ||
End Function | End Function | ||
===Run other programs=== | |||
'''via XSI System''' | |||
'relative pathes don't seem to work with this method | |||
OniSplitLocation = "C:\Softimage\Softimage_Mod_Tool_7.5\OniXSI_resources\OniSplit.exe" | |||
inputFile = "M3GMU_security_tv_wall_0.oni" | |||
inputPath = "C:\Softimage\Softimage_Mod_Tool_7.5\OniXSI_resources\test a" & "\" & inputFile | |||
outputPath = "C:\Softimage\Softimage_Mod_Tool_7.5\OniXSI_resources\test a" | |||
ApplicationParam = "-extract:xml " & """" & outputPath & """" & " " & """" & inputPath & """" | |||
appResult = System( OniSplitLocation & " " & ApplicationParam ) | |||
Select Case appResult | |||
Case 0 LogMessage "Ok." | |||
Case Else LogMessage "Error." | |||
End Select | |||
'''vis CMD''' | |||
' relative path | |||
' the "GameDataFolder" isn't inside the "install" folder | |||
' so we will use ..\ to go one folder backwards | |||
' additional quote signs tells the program where the | |||
' paths strings start and end in case the path contains spaces | |||
' if you are going to use the xml file right after its extraction (which is likely) | |||
' then the "/wait" argument inside the onisplit_action string is important | |||
' without it the code would continue and might try to read the not existing xml file and produce an error | |||
onisplit_location = "F:\Program Files (x86)\Oni\Edition\install" | |||
input_folder = """..\GameDataFolder\level19_Final\ONLVcompound.oni""" | |||
output_folder = """..\GameDataFolder""" | |||
onisplit_action = "cmd /C start /wait OniSplit.exe -extract:xml " & output_folder & " " & input_folder | |||
logmessage "relative path: " & onisplit_action | |||
' expected logmessage: | |||
' INFO : relative path: cmd /C start OniSplit.exe -extract:xml "..\GameDataFolder" "..\GameDataFolder\level19_Final\ONLVcompound.oni" | |||
XSIUtils.LaunchProcess onisplit_action, 1, onisplit_location | |||
' absolute path | |||
'adapt paths so it works on your computer | |||
onisplit_location = "F:\Program Files (x86)\Oni\Edition\install" | |||
input_folder = """F:\Program Files (x86)\Oni\Edition\GameDataFolder\level19_Final\ONLVcompound.oni""" | |||
output_folder = """F:\Program Files (x86)\Oni\Edition\GameDataFolder""" | |||
onisplit_action = "cmd /C start /wait OniSplit.exe -extract:xml " & output_folder & " " & input_folder | |||
logmessage "absolute path: " & onisplit_action | |||
' expected logmessage: | |||
' <small>INFO : absolute path: cmd /C start OniSplit.exe -extract:xml "F:\Program Files (x86)\Oni\Edition\GameDataFolder" "F:\Program Files (x86)\Oni\Edition\GameDataFolder\level19_Final\ONLVcompound.oni"</small> | |||
XSIUtils.LaunchProcess onisplit_action, 1, onisplit_location | |||
' you can also lunch bat files | |||
onibat = "cmd /C start run_wind.bat" | |||
onilocation = "F:\Program Files (x86)\Oni\Edition" | |||
XSIUtils.LaunchProcess onibat, 0, onilocation | |||
'''via winmgmts''' | |||
' slightly modified code from [http://blogs.technet.com/b/heyscriptingguy/archive/2006/12/08/how-can-i-start-a-process-and-then-wait-for-the-process-to-end-before-terminating-the-script.aspx that site] | |||
' ''logmessage "onisplit finished."'' will be executed after the conversion finished, there should be also an delay of 3 seconds to support very slow computers | |||
' if you are going to use this method consider to extent the code to check if input file and output directory exist | |||
osp_loca = "C:\OniAE\Edition\install\OniSplit.exe" | |||
osp_action = "-extract:xml" | |||
osp_output = """C:\OniAE\Edition\GameDataFolder""" | |||
osp_input = """C:\OniAE\Edition\GameDataFolder\level1_Final\AKEVEnvWarehouse.oni""" | |||
osp_total = osp_loca & " " & osp_action & " " & osp_output & " " & osp_input | |||
logmessage osp_total | |||
strComputer = "." | |||
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process") | |||
objWMIService.Create osp_total, null, null, intProcessID | |||
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") | |||
' wait 3 second to find event - should be enough time for single actions on a slow computer | |||
Set colMonitoredProcesses = objWMIService.ExecNotificationQuery _ | |||
("Select * From __InstanceDeletionEvent Within 3 Where TargetInstance ISA 'Win32_Process'") | |||
Do Until i = 1 | |||
Set objLatestProcess = colMonitoredProcesses.NextEvent | |||
If objLatestProcess.TargetInstance.ProcessID = intProcessID Then | |||
i = 1 | |||
End If | |||
Loop | |||
logmessage "onisplit finished." | |||
' now you can work with the extracted xml file | |||
edits