436 lines
16 KiB
VB.net
436 lines
16 KiB
VB.net
Imports Microsoft.Win32
|
|
Public Structure UI
|
|
Public Directory As String
|
|
Public Version As String
|
|
Public Running As Boolean
|
|
End Structure
|
|
|
|
Public Structure AppMon
|
|
Public Exename As String
|
|
Public Path As String
|
|
Public Appname As String
|
|
End Structure
|
|
|
|
|
|
Public Class Form1
|
|
Dim Tick As Long
|
|
Dim m_UI As New UI
|
|
Dim m_Apps(6), m_RunApp As AppMon
|
|
Dim StartTime, EndTime As Date
|
|
Public env_var_text As String
|
|
Dim env_vars() As String
|
|
|
|
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
|
|
e.Cancel = True
|
|
Me.WindowState = FormWindowState.Minimized
|
|
End Sub
|
|
|
|
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
|
'Initilize form
|
|
lbl_indicator.Parent = lbl_runtime
|
|
lbl_indicator.BackColor = Color.Transparent
|
|
lbl_indicator.Location = New Point(27, 30)
|
|
lbl_indicator.Font = New Font("Tahoma", 8.25)
|
|
|
|
strip_version.Text = "v" & Application.ProductVersion.ToString
|
|
|
|
'Populate menu
|
|
menu_turn_off.DropDownItems.Clear()
|
|
menu_turn_off.DropDownItems.Add("Restart", Nothing, AddressOf menu_shutdown_onclick)
|
|
menu_turn_off.DropDownItems.Add("Log Off", Nothing, AddressOf menu_shutdown_onclick)
|
|
menu_turn_off.DropDownItems.Add("Shut Down", Nothing, AddressOf menu_shutdown_onclick)
|
|
|
|
'Set registry
|
|
Registry.SetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Lattice\Nextest Utilization Tracker", "Path", Application.StartupPath)
|
|
|
|
m_Apps(0).Appname = "Nextest UI" : m_Apps(0).Exename = "ui.exe" : m_Apps(0).Path = ""
|
|
m_Apps(1).Appname = "Lot Control Form" : m_Apps(1).Exename = "lotcontrolform.exe" : m_Apps(1).Path = "C:\nextest\LotControlForm\Release\"
|
|
|
|
'Default Run app
|
|
m_RunApp.Appname = "Nextest UI" : m_RunApp.Exename = "ui.exe" : m_RunApp.Path = ""
|
|
|
|
'Create Mutex
|
|
|
|
End Sub
|
|
|
|
Private Sub tmr_runtime_Tick(sender As Object, e As EventArgs) Handles tmr_runtime.Tick
|
|
Dim Hrs As Integer 'number of hours
|
|
Dim Min As Integer 'number of Minutes
|
|
Dim Sec As Integer 'number of Sec
|
|
Dim Days As Integer 'number of days
|
|
|
|
Tick = Tick + 1
|
|
|
|
Sec = Tick Mod 60
|
|
Min = ((Tick - Sec) / 60) Mod 60
|
|
Hrs = ((Tick - (Sec + (Min * 60))) / 3600) Mod 24
|
|
Days = Tick \ 5184000
|
|
lbl_runtime.Text = Format(Days, "00") & ":" & Format(Hrs, "00") & ":" & Format(Min, "00") & ":" & Format(Sec, "00")
|
|
frm_mini.lbl_time.Text = lbl_runtime.Text
|
|
Exit Sub
|
|
End Sub
|
|
|
|
|
|
|
|
Private Sub cmd_start_Click(sender As Object, e As EventArgs) Handles cmd_start.Click
|
|
Tick = 0
|
|
FileOpen(1, Application.StartupPath & "\run.bat", OpenMode.Output, OpenAccess.Write)
|
|
If Len(env_var_text) Then
|
|
env_vars = Split(env_var_text, vbNewLine)
|
|
|
|
If env_vars Is Nothing = False Then
|
|
For x As Integer = 0 To UBound(env_vars)
|
|
PrintLine(1, "Set " & env_vars(x))
|
|
Next
|
|
End If
|
|
End If
|
|
|
|
|
|
If Len(m_RunApp.Path) > 0 Then
|
|
PrintLine(1, "cd " & m_RunApp.Path)
|
|
End If
|
|
|
|
PrintLine(1, m_RunApp.Exename)
|
|
Print(1, "exit")
|
|
|
|
FileClose(1)
|
|
|
|
|
|
cmd_start.Enabled = False
|
|
txt_user.ReadOnly = True
|
|
cmb_group.Enabled = False
|
|
menu_options.Enabled = False
|
|
|
|
'Initial setup before running App
|
|
tmr_runtime.Enabled = True
|
|
m_UI.Running = True
|
|
lbl_status.Text = "RUNNING"
|
|
lbl_status.BackColor = Color.FromArgb(128, 255, 128)
|
|
StartTime = Date.Now
|
|
Me.WindowState = FormWindowState.Minimized
|
|
|
|
Application.DoEvents()
|
|
bw_run.RunWorkerAsync()
|
|
|
|
End Sub
|
|
Private Sub menu_ui_item_onclick(sender As Object, e As EventArgs)
|
|
If sender.ToString = m_UI.Version Then
|
|
MessageBox.Show("Already using " & m_UI.Version & " Nextest UI Version", "Change UI", MessageBoxButtons.OK, MessageBoxIcon.Information)
|
|
Exit Sub
|
|
Else
|
|
Dim result As Integer
|
|
result = MessageBox.Show("Are you sure you want to change UI Version from " & m_UI.Version & " to " & sender.ToString, "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
|
|
If result = vbNo Then
|
|
Exit Sub
|
|
End If
|
|
End If
|
|
|
|
frm_changeui.targetui = sender.ToString
|
|
frm_changeui.TopMost = True
|
|
frm_changeui.Show()
|
|
|
|
End Sub
|
|
|
|
Private Sub menu_shutdown_onclick(sender As Object, e As EventArgs)
|
|
Dim result As Integer
|
|
result = MessageBox.Show("Are you sure you want to " & sender.ToString & " the system", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
|
|
|
|
If result = vbNo Then
|
|
Exit Sub
|
|
End If
|
|
If LCase$(sender.ToString) = "restart" Then
|
|
FileOpen(1, "C:\kill.bat", OpenMode.Output, OpenAccess.Write)
|
|
PrintLine(1, "taskkill /f /im nxtuitrack.exe /im SystemService.exe")
|
|
PrintLine(1, "shutdown -f -r -t 000")
|
|
FileClose(1)
|
|
Shell("C:\kill.bat", AppWinStyle.Hide)
|
|
ElseIf LCase$(sender.ToString) = "log off" Then
|
|
FileOpen(1, "C:\kill.bat", OpenMode.Output, OpenAccess.Write)
|
|
PrintLine(1, "taskkill /f /im nxtuitrack.exe /im SystemService.exe")
|
|
PrintLine(1, "shutdown -f -l -t 000")
|
|
FileClose(1)
|
|
Shell("C:\kill.bat", AppWinStyle.Hide)
|
|
Else
|
|
FileOpen(1, "C:\kill.bat", OpenMode.Output, OpenAccess.Write)
|
|
PrintLine(1, "taskkill /f /im nxtuitrack.exe /im SystemService.exe")
|
|
PrintLine(1, "shutdown -f -s -t 000")
|
|
FileClose(1)
|
|
Shell("C:\kill.bat", AppWinStyle.Hide)
|
|
End If
|
|
|
|
End Sub
|
|
|
|
Private Sub bw_run_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bw_run.DoWork
|
|
|
|
|
|
'SHell Execute the bat file to run the app, wait until exit
|
|
Shell(Application.StartupPath & "\run.bat", AppWinStyle.Hide, True)
|
|
|
|
|
|
'Mark end time then log usage
|
|
EndTime = Date.Now
|
|
LogUsage()
|
|
|
|
'Reset Windows
|
|
Me.WindowState = FormWindowState.Normal
|
|
Me.CenterToScreen()
|
|
|
|
'Reset Variables and controls
|
|
env_var_text = vbNullString
|
|
|
|
lbl_status.Text = "IDLE"
|
|
lbl_status.BackColor = Color.FromArgb(255, 255, 128)
|
|
m_UI.Running = False
|
|
menu_options.Enabled = True
|
|
tmr_runtime.Enabled = False
|
|
|
|
'Reset Default Run app
|
|
m_RunApp.Appname = "Nextest UI" : m_RunApp.Exename = "ui.exe" : m_RunApp.Path = ""
|
|
|
|
'Delete bat file
|
|
FileIO.FileSystem.DeleteFile(Application.StartupPath & "\run.bat", FileIO.UIOption.OnlyErrorDialogs, FileIO.RecycleOption.DeletePermanently)
|
|
cmd_start.Enabled = True
|
|
txt_user.ReadOnly = False
|
|
cmb_group.Enabled = True
|
|
|
|
txt_user.Text = "USER"
|
|
cmb_group.Text = ""
|
|
|
|
SkipShell:
|
|
End Sub
|
|
|
|
Private Sub tmr_eventlistener_Tick(sender As Object, e As EventArgs) Handles tmr_eventlistener.Tick
|
|
Call UpdateUI()
|
|
If (Len(cmb_group.Text) = 0 Or Len(txt_user.Text) = 0 Or LCase$(txt_user.Text) = "user") Then
|
|
cmd_start.Enabled = False
|
|
Else
|
|
If m_UI.Running = False Then
|
|
cmd_start.Enabled = True
|
|
End If
|
|
End If
|
|
|
|
|
|
|
|
If m_UI.Running = False Then
|
|
For Each prog As Process In Process.GetProcesses
|
|
If LCase$(prog.ProcessName) = "ui" Or LCase$(prog.ProcessName) = "lotcontrolform" Then
|
|
|
|
Dim AppIndex As Integer = -1
|
|
For x As Integer = 0 To UBound(m_Apps)
|
|
If LCase$(prog.ProcessName) = Replace(LCase$(m_Apps(x).Exename), ".exe", "") Then
|
|
AppIndex = x
|
|
m_RunApp.Appname = m_Apps(AppIndex).Appname
|
|
m_RunApp.Exename = m_Apps(AppIndex).Exename
|
|
m_RunApp.Path = m_Apps(AppIndex).Path
|
|
Exit For
|
|
End If
|
|
Next
|
|
|
|
prog.Kill()
|
|
Me.WindowState = FormWindowState.Normal
|
|
Me.CenterToScreen()
|
|
tooltip.Show("Please select group in the dropdown menu", cmb_group, New Point(0, -20), 2500)
|
|
|
|
cmd_start.Text = "Start " & m_RunApp.Appname
|
|
End If
|
|
Next
|
|
Else
|
|
If Date.Now.ToString("HH:mm:ss") = "23:59:59" Then
|
|
EndTime = Date.Now
|
|
LogUsage()
|
|
Tick = 0
|
|
|
|
StartTime = Date.Now
|
|
System.Threading.Thread.Sleep(1000)
|
|
End If
|
|
End If
|
|
|
|
If IsRunning("systemservice") = False Then
|
|
If FileIO.FileSystem.FileExists("C:\Windows\systemservice.exe") = True Then
|
|
Shell("C:\Windows\systemservice.exe", AppWinStyle.NormalFocus, False)
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub llbl_view_logs_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles llbl_view_logs.LinkClicked
|
|
If FileIO.FileSystem.DirectoryExists(Application.StartupPath & "\logs") = True Then
|
|
Call Shell("explorer.exe """ & Application.StartupPath & "\logs""", vbMaximizedFocus)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub txt_user_GotFocus(sender As Object, e As EventArgs) Handles txt_user.GotFocus
|
|
Call txt_user.SelectAll()
|
|
End Sub
|
|
|
|
Private Sub txt_user_MouseUp(sender As Object, e As MouseEventArgs) Handles txt_user.MouseUp
|
|
Call txt_user.SelectAll()
|
|
End Sub
|
|
|
|
Private Sub menu_options_Click(sender As Object, e As EventArgs) Handles menu_options.Click
|
|
'Populate UI menu
|
|
Dim FolderList() As String, X As Integer
|
|
FolderList = ListFolders("C:\Nextest\")
|
|
|
|
menu_change_ui.DropDownItems.Clear()
|
|
|
|
For X = 0 To UBound(FolderList)
|
|
If FileIO.FileSystem.FileExists("C:\Nextest\" & FolderList(X) & "\utils\userel.bat") = True Then
|
|
menu_change_ui.DropDownItems.Add(FolderList(X), Nothing, AddressOf menu_ui_item_onclick)
|
|
End If
|
|
Next
|
|
End Sub
|
|
|
|
|
|
Private Sub cmb_group_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmb_group.SelectedIndexChanged
|
|
If txt_user.Text = "USER" Or Len(txt_user.Text) = 0 Then
|
|
tooltip.Show("Please type in your name in the text box", txt_user, New Point(0, -20), 2500)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub menu_set_var_Click(sender As Object, e As EventArgs) Handles menu_set_var.Click
|
|
|
|
frm_env.Show(Me)
|
|
End Sub
|
|
|
|
Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles Me.Resize
|
|
If Me.WindowState = FormWindowState.Minimized Then
|
|
frm_mini.lbl_status.Text = lbl_status.Text
|
|
frm_mini.lbl_status.BackColor = lbl_status.BackColor
|
|
frm_mini.lbl_user.Text = txt_user.Text
|
|
frm_mini.lbl_time.Text = lbl_runtime.Text
|
|
frm_mini.lbl_pcname.Text = "Host: " & System.Environment.MachineName.ToString
|
|
frm_mini.Show()
|
|
ElseIf Me.WindowState = FormWindowState.Normal Then
|
|
frm_mini.Hide()
|
|
End If
|
|
End Sub
|
|
Public Sub LogUsage()
|
|
Dim MachineName As String
|
|
Dim FileName As String
|
|
Dim PrintHeaderFlag As Boolean = False
|
|
Dim TickHour As Double
|
|
|
|
MachineName = UCase$(System.Environment.MachineName)
|
|
FileName = MachineName & "_WW" & WorkWeek(Now) & ".txt"
|
|
|
|
PrintHeaderFlag = FileIO.FileSystem.FileExists(Application.StartupPath & "\logs\" & FileName)
|
|
If FileIO.FileSystem.DirectoryExists(Application.StartupPath & "\logs\") = False Then
|
|
FileIO.FileSystem.CreateDirectory(Application.StartupPath & "\logs\")
|
|
End If
|
|
|
|
FileOpen(1, Application.StartupPath & "\logs\" & FileName, OpenMode.Append, OpenAccess.Write)
|
|
If PrintHeaderFlag = False Then
|
|
Print(1, "PC NAME: " & System.Environment.MachineName & vbNewLine)
|
|
End If
|
|
|
|
TickHour = Math.Round(CDbl(Tick / 3600), 2)
|
|
If TickHour > 0 Then
|
|
Print(1, cmb_group.Text & ":" & vbTab & DateValue(Now) & vbTab & StartTime.ToString("HH:mm") & "-" & EndTime.ToString("HH:mm") & vbTab & vbTab & TickHour & vbTab & UCase(txt_user.Text) & vbNewLine)
|
|
End If
|
|
|
|
FileClose(1)
|
|
End Sub
|
|
|
|
Public Sub UpdateUI()
|
|
Dim new_UI As String
|
|
|
|
'Get UI Directory
|
|
m_UI.Directory = Registry.GetValue("HKEY_CURRENT_USER\Software\NexTest\", "CurrentRelease", "")
|
|
|
|
'Get UI Version
|
|
Dim tempsplit() As String
|
|
tempsplit = Split(m_UI.Directory, "\")
|
|
new_UI = tempsplit(tempsplit.Count - 1)
|
|
|
|
'Update PATH variable inside the program
|
|
If m_UI.Version <> new_UI And Len(m_UI.Version) > 0 Then
|
|
Dim NEW_ENV_PATH As String
|
|
NEW_ENV_PATH = Replace$(System.Environment.GetEnvironmentVariable("PATH"), m_UI.Version, new_UI)
|
|
System.Environment.SetEnvironmentVariable("PATH", NEW_ENV_PATH)
|
|
End If
|
|
|
|
m_UI.Version = new_UI
|
|
strip_ui.Text = "UI: " & m_UI.Version
|
|
frm_mini.lbl_uiversion.Text = "UI: " & m_UI.Version
|
|
End Sub
|
|
|
|
Public Function WorkWeek(ADate As Date) As Integer
|
|
'Dim intReturn As Integer
|
|
'Dim dteFirstSaturday As Date
|
|
|
|
'' Find the first Saturday of the year for the passed in date.
|
|
'dteFirstSaturday = CDate("01/01/" & Year(ADate))
|
|
'Do While Weekday(dteFirstSaturday) < vbSaturday
|
|
' dteFirstSaturday = DateAdd("d", 1, dteFirstSaturday)
|
|
'Loop
|
|
|
|
'If ADate <= dteFirstSaturday Then
|
|
' intReturn = 1
|
|
'Else
|
|
' ' Determine the number of days between the passed in date and the first Saturday.
|
|
' intReturn = DateDiff("d", dteFirstSaturday, ADate)
|
|
' ' Divide the number of days passed by 7 to get the number of weeks.
|
|
' intReturn = intReturn \ 7 + 1
|
|
' If Not Weekday(ADate) = vbSaturday Then
|
|
' intReturn = intReturn + 1
|
|
' End If
|
|
'End If
|
|
|
|
'WorkWeek = intReturn
|
|
|
|
WorkWeek = System.Globalization.DateTimeFormatInfo.CurrentInfo.Calendar.GetWeekOfYear(Now, Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday)
|
|
|
|
End Function
|
|
|
|
Public Function ListFolders(Mypath As String) As String()
|
|
Dim MyName As String, iCount As Integer, TempString As String
|
|
iCount = 0
|
|
TempString = vbNullString
|
|
MyName = Dir(Mypath, vbDirectory) ' Retrieve the first entry.
|
|
Do While MyName <> "" ' Start the loop.
|
|
' Ignore the current directory and the encompassing directory.
|
|
If MyName <> "." And MyName <> ".." Then
|
|
' Use bitwise comparison to make sure MyName is a directory.
|
|
If (GetAttr(Mypath & MyName) And vbDirectory) = vbDirectory Then
|
|
TempString = TempString & MyName & ","
|
|
iCount = iCount + 1
|
|
End If ' it represents a directory.
|
|
End If
|
|
MyName = Dir() ' Get next entry.
|
|
Loop
|
|
|
|
ListFolders = Split(TempString, ",")
|
|
End Function
|
|
|
|
|
|
|
|
Public Function IsRunning(ProcessName As String) As Boolean
|
|
Dim p() As Process
|
|
p = Process.GetProcessesByName(ProcessName)
|
|
If p.Count > 0 Then
|
|
IsRunning = True
|
|
Else
|
|
IsRunning = False
|
|
End If
|
|
End Function
|
|
|
|
Public Function IsProgramLoaded() As Boolean
|
|
IsProgramLoaded = False
|
|
For Each prog As Process In Process.GetProcesses
|
|
If LCase$(prog.ProcessName) = "ui" Then
|
|
If InStr(LCase$(prog.MainWindowTitle), ".exe") > 0 Then
|
|
IsProgramLoaded = True
|
|
End If
|
|
Exit For
|
|
End If
|
|
Next
|
|
End Function
|
|
|
|
|
|
Private Sub menu_change_ui_Click(sender As Object, e As EventArgs) Handles menu_change_ui.Click
|
|
|
|
End Sub
|
|
End Class
|
|
|
|
|