Visual Basic .NET: Difference between revisions

From OniGalore
Jump to navigation Jump to search
mNo edit summary
m (added OniSplitConvert function to Oni Class (code snippet))
Line 27: Line 27:
: GetXSI - returns Mod Tool path (type string) (e.g. C:\Softimage\Softimage_Mod_Tool_7.5\Application\bin)
: GetXSI - returns Mod Tool path (type string) (e.g. C:\Softimage\Softimage_Mod_Tool_7.5\Application\bin)
: GetOniSplit - outputs an array with (0) as path (type string) and (1) as version (type string)
: GetOniSplit - outputs an array with (0) as path (type string) and (1) as version (type string)
 
: OniSplitConvert - tells OniSplit to do something (needed inputs: OniSplit path, command, output path, input path)


  Imports System.IO ' for files and directories
  Imports System.IO ' for files and directories
Line 113: Line 113:
         End If
         End If
   
   
    End Function
    ' example
    ' Oni.OniSplitConvert(OSpath, "-extract:xml", outputFolder, inputFolder)
    Shared Function OniSplitConvert(OSpath As String, cmd As String, input As String, output As String)
        Dim objProcess As System.Diagnostics.Process
        Try
            ' the quotes are used to prevent possible errors by paths with spaces
            objProcess = Process.Start(OSpath, cmd & " " & """" & output & """" & " " & """" & input & """")
            objProcess.WaitForExit()
            objProcess.Close()
        Catch
            MessageBox.Show("Could not start: " & OSpath & " " & cmd & " " & """" & output & """" & " " & """" & input & """")
        End Try
     End Function
     End Function
   
   

Revision as of 21:38, 26 December 2015

Visual Basic .NET

This page serves as a brief VB.net documentation with focus on Oni-related aspects.


Projects


Basic knowledge

Q: How can I use functions from another class?
A: First condition: The function must be a "Shared" one. For example "Shared Function GetApp()". Second condition: in the target code, the class must be written beforehand (for example "Oni.GetApp" whereby "Oni" is the source class's name).


Code snippets

Common functions that are shared among VB.net projects should have their own class.

That way, the functions don't need be rewritten each time and it helps to keep the code more clear.


Class Oni

Functions in this class:

GetApp - returns app path (type string)
GetAE - returns AE home path (type string) (e.g. C:\Oni)
GetXSI - returns Mod Tool path (type string) (e.g. C:\Softimage\Softimage_Mod_Tool_7.5\Application\bin)
GetOniSplit - outputs an array with (0) as path (type string) and (1) as version (type string)
OniSplitConvert - tells OniSplit to do something (needed inputs: OniSplit path, command, output path, input path)
Imports System.IO ' for files and directories
Imports Microsoft.Win32 ' for registry keys


Public Class Oni


   Shared Function GetApp()
       Return Application.StartupPath().ToString()
   End Function

   Shared Function ReadRegStr(RootKey, Key, Value, RegType)
       Dim oCtx, oLocator, oReg, oInParams, oOutParams

       oCtx = CreateObject("WbemScripting.SWbemNamedValueSet")
       oCtx.Add("__ProviderArchitecture", RegType)

       oLocator = CreateObject("Wbemscripting.SWbemLocator")
       oReg = oLocator.ConnectServer("", "root\default", "", "", , , , oCtx).Get("StdRegProv")

       oInParams = oReg.Methods_("GetStringValue").InParameters
       oInParams.hDefKey = RootKey
       oInParams.sSubKeyName = Key
       oInParams.sValueName = Value

       oOutParams = oReg.ExecMethod_("GetStringValue", oInParams, , oCtx)

       ReadRegStr = oOutParams.sValue
   End Function

  Shared Function GetAE()
       Dim OS_bitness As Integer
       Dim WshShell = CreateObject("WScript.Shell")
       If InStr(WshShell.RegRead("HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0\Identifier"), "64") > 0 Then
           OS_bitness = 64
       Else
           OS_bitness = 32
       End If
       Const HKEY_LOCAL_MACHINE = &H80000002
       Return ReadRegStr(HKEY_LOCAL_MACHINE, _
           "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{B67333BB-1CF9-4EFD-A40B-E25B5CB4C8A7}}_is1", _
           "InstallLocation", _
           OS_bitness)

   End Function

   Shared Function GetXsi()
       Dim oRegKey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\\Softimage\\SOFTIMAGE Application")

       Dim XsiDir As String
       Dim FoundXsi As Boolean = False

       Dim Arr = oRegKey.GetSubKeyNames
       For Each n In Arr
           If InStr(n, "Softimage_Mod_Tool_7.5|Application|bin") > 0 Then
               XsiDir = Replace(n, "|", "\")
               If Directory.Exists(XsiDir) = True Then
                   Return XsiDir
                   FoundXsi = True
               End If
           End If
       Next

       If FoundXsi = False Then
           Return ""
       End If

       oRegKey.Close()
   End Function

   Shared Function GetOniSplit() As String()
       Dim OSpath As String = ""
       Dim FSO = CreateObject("Scripting.FileSystemObject")

       If File.Exists(Application.StartupPath().ToString & "\OniSplit.exe") Then
           OSpath = Application.StartupPath().ToString & "\OniSplit.exe"
           Return New String() {OSpath, FSO.GetFileVersion(OSpath)}
       ElseIf File.Exists(GetAE() & "AE\Tools\OniSplit.exe") Then
           OSpath = GetAE() & "AE\Tools\OniSplit.exe"
           Return New String() {OSpath, FSO.GetFileVersion(OSpath)}
       Else
           Return New String() {"", ""}
       End If

   End Function

   ' example
   ' Oni.OniSplitConvert(OSpath, "-extract:xml", outputFolder, inputFolder)
   Shared Function OniSplitConvert(OSpath As String, cmd As String, input As String, output As String)
       Dim objProcess As System.Diagnostics.Process
       Try
           ' the quotes are used to prevent possible errors by paths with spaces
           objProcess = Process.Start(OSpath, cmd & " " & """" & output & """" & " " & """" & input & """")
           objProcess.WaitForExit()
           objProcess.Close()
       Catch
           MessageBox.Show("Could not start: " & OSpath & " " & cmd & " " & """" & output & """" & " " & """" & input & """")
       End Try
   End Function

End Class