Find all our projects in development below.
All source code is GNU General Public License (GPL)
Browsing frmThreadProps.vb (6.39 KB)
Option Explicit On
Imports System.Diagnostics
Public Class frmThreadProps
Private _thisProcess As Process = Nothing
Private _thisThread As ProcessThread = Nothing
Private _thisPriority As ThreadPriorityLevel = Nothing
Private priorityList() As Integer = { _
ThreadPriorityLevel.TimeCritical, _
ThreadPriorityLevel.Highest, _
ThreadPriorityLevel.AboveNormal, _
ThreadPriorityLevel.Normal, _
ThreadPriorityLevel.BelowNormal, _
ThreadPriorityLevel.Lowest, _
ThreadPriorityLevel.Idle _
}
Public Sub New(ByVal objWindow As clsWindowObject)
Me.New(objWindow.ProcessId, objWindow.ThreadId)
End Sub
Public Sub New(ByVal processId As Integer, ByVal threadId As Integer)
Me.New(_getProcessById(processId), threadId)
End Sub
Public Sub New(ByVal objProcess As Process, ByVal threadId As Integer)
' This call is required by the Windows Form Designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
_thisProcess = objProcess
If Not (_thisProcess Is Nothing) Then
Dim thisThread As ProcessThread = Nothing
For i As Integer = 0 To _thisProcess.Threads.Count - 1
thisThread = _thisProcess.Threads(i)
If thisThread.Id = threadId Then
_thisThread = thisThread
Exit For
End If
Next
End If
End Sub
Private Shared Function _getProcessById(ByVal processId As Integer) As Process
Try
Return Process.GetProcessById(processId)
Catch
Return Nothing
End Try
End Function
Private Function _searchArray(ByVal intPriority As Integer) As Boolean
If intPriority = _thisPriority Then
Return True
Else
Return False
End If
End Function
Private Sub _showWaitCursor(ByVal bShow As Boolean)
' show/hide the hourglass
If bShow Then
Me.Cursor = Cursors.WaitCursor
Me.UseWaitCursor = True
Else
Me.UseWaitCursor = False
Me.Cursor = Cursors.Arrow
End If
End Sub
Private Sub frmThreadProps_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If _thisProcess Is Nothing Or _thisThread Is Nothing Then
MessageBox.Show("Thread not available.", Application.ProductName, _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Me.Close()
Exit Sub
End If
Me.Text += FormatHandle(_thisThread.Id)
Try
' store the priority class
_thisPriority = _thisThread.PriorityLevel
Catch
' disable the priority class selection
cboPriority.Enabled = False
End Try
' general page
txtAssembly.Text = _thisProcess.ProcessName
cboPriority.SelectedIndex = Array.FindIndex(priorityList, AddressOf _searchArray)
cboPriority.Tag = False
linkThreadId.Text = FormatHandle(_thisThread.Id)
lblProcessId2.Text = FormatHandle(_thisProcess.Id)
lblThreadState2.Text = _thisThread.ThreadState.ToString
If _thisThread.ThreadState = ThreadState.Wait Then _
lblWaitReason2.Text = _thisThread.WaitReason.ToString
Try
lblStartTime2.Text = _thisThread.StartTime.ToString
lblCPUTime2.Text = _thisThread.UserProcessorTime.ToString
lblUserTime2.Text = _thisThread.UserProcessorTime.Add(_thisThread.PrivilegedProcessorTime).ToString
lblPrivilegedTime2.Text = _thisThread.PrivilegedProcessorTime.ToString
lblElapsedTime2.Text = _thisThread.TotalProcessorTime.ToString
Catch
lblStartTime2.Text = "N/A"
lblCPUTime2.Text = "N/A"
lblUserTime2.Text = "N/A"
lblPrivilegedTime2.Text = "N/A"
lblElapsedTime2.Text = "N/A"
End Try
Try
lblCurrentPriority2.Text = _thisThread.CurrentPriority.ToString
lblBasePriority2.Text = _thisThread.BasePriority.ToString
lblStartAddress2.Text = FormatHandle(_thisThread.StartAddress.ToInt32)
Catch
lblCurrentPriority2.Text = "N/A"
lblBasePriority2.Text = "N/A"
lblStartAddress2.Text = "N/A"
End Try
btnApply.Enabled = False
End Sub
Private Sub cboPriority_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboPriority.SelectedIndexChanged
cboPriority.Tag = True
btnApply.Enabled = True
End Sub
Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click
Me.Close()
End Sub
Private Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOk.Click
btnApply.PerformClick()
Me.Close()
End Sub
Private Sub btnApply_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnApply.Click
If cboPriority.Tag Then
Try
' set the priority level
_thisThread.PriorityLevel = priorityList(cboPriority.SelectedIndex)
Catch ex As Exception
MessageBox.Show("Error: " + ex.Message, Application.ProductName, _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End If
btnApply.Enabled = False
End Sub
Private Sub btnProcessProps_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcessProps.Click
_showWaitCursor(True)
With New frmProcessProps(_thisProcess)
.Show(Me)
End With
_showWaitCursor(False)
End Sub
Private Sub linkThreadId_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles linkThreadId.LinkClicked
_showWaitCursor(True)
With New frmProcessSpy(Nothing, _thisProcess, _thisThread)
.Show(Me)
End With
_showWaitCursor(False)
End Sub
End Class