Added the ability to launch other processes when a game is detected
This commit is contained in:
@@ -0,0 +1,371 @@
|
||||
Imports GBM.My.Resources
|
||||
Imports System.IO
|
||||
|
||||
Public Class frmProcessManager
|
||||
Dim hshProcessData As Hashtable
|
||||
Private bIsDirty As Boolean = False
|
||||
Private bIsLoading As Boolean = False
|
||||
Private oCurrentProcess As clsProcess
|
||||
|
||||
Private Property IsDirty As Boolean
|
||||
Get
|
||||
Return bIsDirty
|
||||
End Get
|
||||
Set(value As Boolean)
|
||||
bIsDirty = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private Property IsLoading As Boolean
|
||||
Get
|
||||
Return bIsLoading
|
||||
End Get
|
||||
Set(value As Boolean)
|
||||
bIsLoading = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private Enum eModes As Integer
|
||||
View = 1
|
||||
Edit = 2
|
||||
Add = 3
|
||||
Disabled = 4
|
||||
End Enum
|
||||
|
||||
Private eCurrentMode As eModes = eModes.Disabled
|
||||
|
||||
Private Property ProcessData As Hashtable
|
||||
Get
|
||||
Return hshProcessData
|
||||
End Get
|
||||
Set(value As Hashtable)
|
||||
hshProcessData = value
|
||||
End Set
|
||||
End Property
|
||||
|
||||
Private Sub ProcessBrowse()
|
||||
Dim sDefaultFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
|
||||
Dim sCurrentPath As String = txtPath.Text
|
||||
Dim sNewPath As String
|
||||
|
||||
If sCurrentPath <> String.Empty Then
|
||||
sCurrentPath = Path.GetDirectoryName(txtPath.Text)
|
||||
If Directory.Exists(sCurrentPath) Then
|
||||
sDefaultFolder = sCurrentPath
|
||||
End If
|
||||
End If
|
||||
|
||||
sNewPath = mgrCommon.OpenFileBrowser("PM_Process", frmProcessManager_ChooseProcess, "exe",
|
||||
frmProcessManager_Executable, sDefaultFolder, False, True)
|
||||
|
||||
If sNewPath <> String.Empty Then
|
||||
txtPath.Text = sNewPath
|
||||
End If
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub LoadData()
|
||||
ProcessData = mgrProcess.ReadProcesses
|
||||
lstProcesses.Items.Clear()
|
||||
FormatAndFillList()
|
||||
End Sub
|
||||
|
||||
Private Function HandleDirty() As MsgBoxResult
|
||||
Dim oResult As MsgBoxResult
|
||||
|
||||
oResult = mgrCommon.ShowMessage(App_ConfirmDirty, MsgBoxStyle.YesNoCancel)
|
||||
|
||||
Select Case oResult
|
||||
Case MsgBoxResult.Yes
|
||||
IsDirty = False
|
||||
Case MsgBoxResult.No
|
||||
IsDirty = False
|
||||
Case MsgBoxResult.Cancel
|
||||
'No Change
|
||||
End Select
|
||||
|
||||
Return oResult
|
||||
|
||||
End Function
|
||||
|
||||
Private Sub FormatAndFillList()
|
||||
IsLoading = True
|
||||
|
||||
For Each oProcess As clsProcess In ProcessData.Values
|
||||
lstProcesses.Items.Add(oProcess.Name)
|
||||
Next
|
||||
|
||||
IsLoading = False
|
||||
End Sub
|
||||
|
||||
Private Sub FillData()
|
||||
IsLoading = True
|
||||
|
||||
oCurrentProcess = DirectCast(ProcessData(lstProcesses.SelectedItems(0).ToString), clsProcess)
|
||||
|
||||
txtID.Text = oCurrentProcess.ID
|
||||
txtName.Text = oCurrentProcess.Name
|
||||
txtPath.Text = oCurrentProcess.Path
|
||||
txtArguments.Text = oCurrentProcess.Args
|
||||
chkKillProcess.Checked = oCurrentProcess.Kill
|
||||
|
||||
IsLoading = False
|
||||
End Sub
|
||||
|
||||
Private Sub DirtyCheck_ValueChanged(sender As Object, e As EventArgs)
|
||||
If Not IsLoading Then
|
||||
IsDirty = True
|
||||
If Not eCurrentMode = eModes.Add Then EditProcess()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub AssignDirtyHandlers(ByVal oCtls As GroupBox.ControlCollection)
|
||||
For Each ctl As Control In oCtls
|
||||
If TypeOf ctl Is TextBox Then
|
||||
AddHandler DirectCast(ctl, TextBox).TextChanged, AddressOf DirtyCheck_ValueChanged
|
||||
End If
|
||||
Next
|
||||
End Sub
|
||||
|
||||
Private Sub WipeControls(ByVal oCtls As GroupBox.ControlCollection)
|
||||
For Each ctl As Control In oCtls
|
||||
If TypeOf ctl Is TextBox Then
|
||||
DirectCast(ctl, TextBox).Text = String.Empty
|
||||
End If
|
||||
Next
|
||||
txtID.Text = String.Empty
|
||||
End Sub
|
||||
|
||||
Private Sub ModeChange()
|
||||
IsLoading = True
|
||||
|
||||
Select Case eCurrentMode
|
||||
Case eModes.Add
|
||||
grpProcess.Enabled = True
|
||||
WipeControls(grpProcess.Controls)
|
||||
btnSave.Enabled = True
|
||||
btnCancel.Enabled = True
|
||||
btnAdd.Enabled = False
|
||||
btnDelete.Enabled = False
|
||||
lstProcesses.Enabled = False
|
||||
chkKillProcess.Checked = True
|
||||
Case eModes.Edit
|
||||
lstProcesses.Enabled = False
|
||||
grpProcess.Enabled = True
|
||||
btnSave.Enabled = True
|
||||
btnCancel.Enabled = True
|
||||
btnAdd.Enabled = False
|
||||
btnDelete.Enabled = False
|
||||
Case eModes.View
|
||||
lstProcesses.Enabled = True
|
||||
grpProcess.Enabled = True
|
||||
btnSave.Enabled = False
|
||||
btnCancel.Enabled = False
|
||||
btnAdd.Enabled = True
|
||||
btnDelete.Enabled = True
|
||||
Case eModes.Disabled
|
||||
lstProcesses.Enabled = True
|
||||
WipeControls(grpProcess.Controls)
|
||||
grpProcess.Enabled = False
|
||||
btnSave.Enabled = False
|
||||
btnCancel.Enabled = False
|
||||
btnAdd.Enabled = True
|
||||
btnDelete.Enabled = True
|
||||
End Select
|
||||
|
||||
IsLoading = False
|
||||
End Sub
|
||||
|
||||
Private Sub EditProcess()
|
||||
eCurrentMode = eModes.Edit
|
||||
ModeChange()
|
||||
End Sub
|
||||
|
||||
Private Sub AddProcess()
|
||||
eCurrentMode = eModes.Add
|
||||
ModeChange()
|
||||
txtName.Focus()
|
||||
End Sub
|
||||
|
||||
Private Sub CancelEdit()
|
||||
If bIsDirty Then
|
||||
Select Case HandleDirty()
|
||||
Case MsgBoxResult.Yes
|
||||
SaveProcess()
|
||||
Case MsgBoxResult.No
|
||||
If lstProcesses.SelectedItems.Count > 0 Then
|
||||
eCurrentMode = eModes.View
|
||||
ModeChange()
|
||||
FillData()
|
||||
lstProcesses.Focus()
|
||||
Else
|
||||
eCurrentMode = eModes.Disabled
|
||||
ModeChange()
|
||||
End If
|
||||
Case MsgBoxResult.Cancel
|
||||
'Do Nothing
|
||||
End Select
|
||||
Else
|
||||
If lstProcesses.SelectedItems.Count > 0 Then
|
||||
eCurrentMode = eModes.View
|
||||
ModeChange()
|
||||
FillData()
|
||||
lstProcesses.Focus()
|
||||
Else
|
||||
eCurrentMode = eModes.Disabled
|
||||
ModeChange()
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub SaveProcess()
|
||||
Dim oProcess As New clsProcess
|
||||
Dim bSuccess As Boolean = False
|
||||
|
||||
If txtID.Text <> String.Empty Then
|
||||
oProcess.ID = txtID.Text
|
||||
End If
|
||||
oProcess.Name = txtName.Text
|
||||
oProcess.Path = txtPath.Text
|
||||
oProcess.Args = txtArguments.Text
|
||||
oProcess.Kill = chkKillProcess.Checked
|
||||
|
||||
Select Case eCurrentMode
|
||||
Case eModes.Add
|
||||
If CoreValidatation(oProcess) Then
|
||||
bSuccess = True
|
||||
mgrProcess.DoProcessAdd(oProcess)
|
||||
eCurrentMode = eModes.View
|
||||
End If
|
||||
Case eModes.Edit
|
||||
If CoreValidatation(oProcess) Then
|
||||
bSuccess = True
|
||||
mgrProcess.DoProcessUpdate(oProcess)
|
||||
eCurrentMode = eModes.View
|
||||
End If
|
||||
End Select
|
||||
|
||||
If bSuccess Then
|
||||
IsDirty = False
|
||||
LoadData()
|
||||
ModeChange()
|
||||
If eCurrentMode = eModes.View Then lstProcesses.SelectedIndex = lstProcesses.Items.IndexOf(oProcess.Name)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub DeleteProcess()
|
||||
Dim oProcess As clsProcess
|
||||
|
||||
If lstProcesses.SelectedItems.Count > 0 Then
|
||||
oProcess = DirectCast(ProcessData(lstProcesses.SelectedItems(0).ToString), clsProcess)
|
||||
|
||||
If mgrCommon.ShowMessage(frmProcessManager_ConfirmDelete, oProcess.Name, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
|
||||
mgrProcess.DoProcessDelete(oProcess.ID)
|
||||
LoadData()
|
||||
eCurrentMode = eModes.Disabled
|
||||
ModeChange()
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Sub SwitchProcess()
|
||||
If lstProcesses.SelectedItems.Count > 0 Then
|
||||
eCurrentMode = eModes.View
|
||||
FillData()
|
||||
ModeChange()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Private Function CoreValidatation(ByVal oProcess As clsProcess) As Boolean
|
||||
If txtName.Text.Trim = String.Empty Then
|
||||
mgrCommon.ShowMessage(frmProcessManager_ErrorValidName, MsgBoxStyle.Exclamation)
|
||||
txtName.Focus()
|
||||
Return False
|
||||
End If
|
||||
|
||||
If txtPath.Text.Trim = String.Empty Then
|
||||
mgrCommon.ShowMessage(frmProcessManager_ErrorValidPath, MsgBoxStyle.Exclamation)
|
||||
txtPath.Focus()
|
||||
Return False
|
||||
Else
|
||||
If Not File.Exists(txtPath.Text.Trim) Then
|
||||
mgrCommon.ShowMessage(frmProcessManager_ErrorPathNotFound, MsgBoxStyle.Exclamation)
|
||||
txtPath.Focus()
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
|
||||
If mgrProcess.DoCheckDuplicate(oProcess.Name, oProcess.ID) Then
|
||||
mgrCommon.ShowMessage(frmProcessManager_ErrorDupe, MsgBoxStyle.Exclamation)
|
||||
txtName.Focus()
|
||||
Return False
|
||||
End If
|
||||
|
||||
Return True
|
||||
End Function
|
||||
|
||||
Private Sub SetForm()
|
||||
'Set Form Name
|
||||
Me.Text = frmProcessManager_FormName
|
||||
|
||||
'Set Form Text
|
||||
btnCancel.Text = frmProcessManager_btnCancel
|
||||
btnSave.Text = frmProcessManager_btnSave
|
||||
grpProcess.Text = frmProcessManager_grpProcess
|
||||
btnProcessBrowse.Text = frmProcessManager_btnProcessBrowse
|
||||
lblProcess.Text = frmProcessManager_lblPath
|
||||
lblName.Text = frmProcessManager_lblName
|
||||
btnClose.Text = frmProcessManager_btnClose
|
||||
btnDelete.Text = frmProcessManager_btnDelete
|
||||
btnAdd.Text = frmProcessManager_btnAdd
|
||||
chkKillProcess.Text = frmProcessManager_chkKillProcess
|
||||
End Sub
|
||||
|
||||
Private Sub frmProcessManager_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
||||
SetForm()
|
||||
LoadData()
|
||||
ModeChange()
|
||||
AssignDirtyHandlers(grpProcess.Controls)
|
||||
End Sub
|
||||
|
||||
Private Sub lstProcesses_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lstProcesses.SelectedIndexChanged
|
||||
SwitchProcess()
|
||||
End Sub
|
||||
|
||||
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
|
||||
AddProcess()
|
||||
End Sub
|
||||
|
||||
Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
|
||||
DeleteProcess()
|
||||
End Sub
|
||||
|
||||
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
|
||||
SaveProcess()
|
||||
End Sub
|
||||
|
||||
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
|
||||
CancelEdit()
|
||||
End Sub
|
||||
|
||||
Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
|
||||
Me.Close()
|
||||
End Sub
|
||||
|
||||
Private Sub btnPathBrowse_Click(sender As Object, e As EventArgs) Handles btnProcessBrowse.Click
|
||||
ProcessBrowse()
|
||||
End Sub
|
||||
|
||||
Private Sub frmProcessManager_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
|
||||
If bIsDirty Then
|
||||
Select Case HandleDirty()
|
||||
Case MsgBoxResult.Yes
|
||||
SaveProcess()
|
||||
Case MsgBoxResult.No
|
||||
'Do Nothing
|
||||
Case MsgBoxResult.Cancel
|
||||
e.Cancel = True
|
||||
End Select
|
||||
End If
|
||||
End Sub
|
||||
End Class
|
||||
Reference in New Issue
Block a user