Projects

Find all our projects in development below.
All source code is GNU General Public License (GPL)

javaSpy

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

Download frmThreadProps.vb

Back to file list


Back to project page