8,484
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