8,306
edits
Paradox-01 (talk | contribs) m (improving key search) |
Paradox-01 (talk | contribs) (catching command-line arguments on load event and on StartupNextInstance event (for single-instance apps)) |
||
Line 9: | Line 9: | ||
: Q: How can I use functions from another class? | : 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). | : 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). | ||
===Command-line functions within a forms application=== | |||
Since you have to watch out for multiple events, the argument processing should happen in a separate function so the code can be easily re-used. | |||
' Form1.vb (main form) | |||
Public Function processArgs(ByVal args() As String) | |||
For Each a In args | |||
MsgBox(a) | |||
Next | |||
End Function | |||
; Catch arguments from form starts event | |||
' Form1.vb (main form) | |||
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load | |||
If My.Application.CommandLineArgs.Count > 0 Then | |||
processArgs(My.Application.CommandLineArgs.ToArray) | |||
End If | |||
' [...] | |||
end sub | |||
; Catch arguments when a single-instance application is already running | |||
The load event can't be triggered if the application can't be opened more than once at a time. This is named a "single-instance application" and will trigger an StartupNextInstance event. Read [http://stackoverflow.com/questions/28831765/pass-command-line-to-first-instance-of-a-single-instance-app here] for details. | |||
'ApplicationEvents.vb | |||
Imports Microsoft.VisualBasic.ApplicationServices | |||
Namespace My | |||
Partial Friend Class MyApplication | |||
Private Sub MyApplication_StartupNextInstance(sender As Object, e As StartupNextInstanceEventArgs) Handles Me.StartupNextInstance | |||
Dim f = Application.MainForm | |||
If f.GetType Is GetType(Form1) Then | |||
CType(f, Form1).processArgs(e.CommandLine.ToArray) | |||
End If | |||
End Sub | |||
End Class | |||
End Namespace | |||
===Registry=== | ===Registry=== | ||
Line 32: | Line 80: | ||
==Code snippets== | ==Code snippets== | ||
===Registry=== | |||
; Check if key exists | |||
Private Function getXsiFromRegistry() As String() | |||
Dim oRegKey As RegistryKey = Registry.CurrentUser.OpenSubKey("Software\\Softimage\\SOFTIMAGE Application") | |||
Dim XsiPathInReg As String = "" | |||
If oRegKey Is Nothing Then | |||
XsiPathInReg = "" | |||
Else | |||
Dim Arr = oRegKey.GetSubKeyNames | |||
For Each n In Arr | |||
If InStr(n, "Softimage_Mod_Tool_7.5|Application|bin") > 0 Then | |||
XsiPathInReg = Replace(n, "|", "\") | |||
If Directory.Exists(XsiPathInReg) = False Then | |||
XsiPathInReg = "" | |||
End If | |||
End If | |||
Next | |||
oRegKey.Close() | |||
End If | |||
If XsiPathInReg = "" Then | |||
Return New String() {"", "notvalid"} | |||
Else | |||
Return New String() {XsiPathInReg, "valid"} | |||
End If | |||
End Function | |||
If getXsiFromRegistry(1) = "valid" Then | |||
MsgBox(getXsiFromRegistry(0)) | |||
End If | |||
: example of a valid, returned path: C:\Softimage\Softimage_Mod_Tool_7.5\Application\bin | |||
==Code snippets (old)== | |||
Common functions that are shared among VB.net projects should have their own class. | Common functions that are shared among VB.net projects should have their own class. | ||
Line 176: | Line 260: | ||
Next | Next | ||
End Sub | End Sub | ||
[[Category:Modding tutorials]] | [[Category:Modding tutorials]] |
edits