'------------------------------------------------------------------------------
' Procesos en Inicio
' Lista los procesos en ejecución y los que se inician con Windows
'
' Última revisión (2003) para VS.NET 2002 (01/Mar/03)
' Última revisión (2004) para VS.NET 2003 (06/Mar/04)
' Revisado con algunas mejoras (02/Ene/06)
' Añado Splitter y el directorio del ejecutable
'
' ©Guillermo 'guille' Som, 2003-2006
'------------------------------------------------------------------------------
Imports Microsoft.Win32
Imports System.IO
Public Class fProcesosInicio
Inherits System.Windows.Forms.Form
'
Private ColorOscuro As System.Drawing.Color = Color.FromKnownColor(KnownColor.ControlDark)
Private ColorClaro As System.Drawing.Color = Color.FromKnownColor(KnownColor.ControlLightLight)
Private nombreEquipo As String = "."
'
Public Sub New()
MyBase.New()
Application.EnableVisualStyles()
Application.DoEvents()
'El Diseñador de Windows Forms requiere esta llamada.
InitializeComponent()
'Agregar cualquier inicialización después de la llamada a InitializeComponent()
linea1.Left = 2
linea1.Width = Me.ClientSize.Width - 4
linea1.BackColor = ColorOscuro
linea1.Height = 1
linea2.Size = linea1.Size
linea2.BackColor = ColorClaro
linea2.Height = 1
linea2.Top = linea1.Top + 1
linea2.SendToBack()
'
' posicionarla arriba en el centro
Me.Top = -4
Me.Left = (Screen.PrimaryScreen.WorkingArea.Width - Me.Width) \ 2
'
End Sub
'
#Region " Código generado por el Diseñador de Windows Forms "
#End Region
'
Private Sub Form_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
'
With Me.lvEnEjecucion
.View = View.Details
.FullRowSelect = True
.CheckBoxes = False
.GridLines = True
.LabelEdit = False
.Columns.Clear()
.Columns.Add("Proceso", 120, HorizontalAlignment.Left)
.Columns.Add("Hora inicio", 128, HorizontalAlignment.Right)
.Columns.Add("Directorio", 300, HorizontalAlignment.Left)
.Items.Clear()
End With
With lvEnInicio
.View = View.Details
.FullRowSelect = True
.CheckBoxes = False
.GridLines = True
.LabelEdit = False
.Columns.Clear()
.Columns.Add("Nombre", 160, HorizontalAlignment.Left)
.Columns.Add("Ejecutable", 400, HorizontalAlignment.Left)
.Columns.Add("Clave del registro", 480, HorizontalAlignment.Left)
.Items.Clear()
End With
'
lblInfo.Text = "©Guillermo 'guille' Som, 2003"
If DateTime.Now.Year > 2006 Then
lblInfo.Text &= "-" & DateTime.Now.Year.ToString
Else
lblInfo.Text &= "-2006"
End If
'
' mostrar los programas en el inicio de las claves del registro
mostrarEnInicio()
'
' mostrar los procesos activos
Me.btnActualizar_Click(btnActualizar, System.EventArgs.Empty)
'
End Sub
'
Private Sub btnCerrar_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles btnCerrar.Click
Me.Close()
End Sub
'
Private Sub btnDetener_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles btnDetener.Click
' detener el argumento seleccionado de la lista
Dim prog As String
'
If lvEnEjecucion.SelectedItems.Count = 0 Then Exit Sub
'
Try
prog = lvEnEjecucion.SelectedItems(0).Text
If MessageBox.Show("¿Quieres cerrar el programa: " & prog & "?", "Cerrar proceso", _
MessageBoxButtons.YesNo, MessageBoxIcon.Question, _
MessageBoxDefaultButton.Button2) = DialogResult.No Then
Exit Sub
End If
Catch 'ex As Exception
Exit Sub
End Try
'
Try
Dim procesos() As Process = Process.GetProcessesByName(prog)
procesos(0).CloseMainWindow()
If procesos(0).HasExited = False Then
procesos(0).Kill()
procesos(0).Close()
End If
'
btnActualizar_Click(btnActualizar, e)
Catch ex As Exception
lblInfo.Text = " Error al detener el proceso: " & ex.Message
MessageBox.Show("Error al detener el proceso:" & vbCrLf & ex.Message)
End Try
End Sub
'
Private Sub btnActualizar_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles btnActualizar.Click
'
Me.Cursor = Cursors.WaitCursor
Me.Refresh()
'
lvEnEjecucion.Items.Clear()
'
' actualizar la lista con los procesos activos
Dim procesos() As Process = Process.GetProcesses(nombreEquipo)
'
Dim proceso As Process
For Each proceso In procesos
Dim lvItem As ListViewItem = lvEnEjecucion.Items.Add(proceso.ProcessName)
Try
Try
lvItem.SubItems.Add(proceso.StartTime.ToString("dd/MM/yyyy HH:mm:ss"))
Catch
lvItem.SubItems.Add(" ")
End Try
' Añado el directorio del proceso (02/Ene/06)
Try
lvItem.SubItems.Add(proceso.MainModule.FileName)
Catch
lvItem.SubItems.Add(" ")
End Try
Catch ex As Exception
lvItem.Text = "<Error>"
lvItem.SubItems.Add(" ")
End Try
Next
'
lvEnEjecucion.Sorting = SortOrder.Descending '= SortOrder.Ascending
lvEnEjecucion.Sort()
'
Me.Cursor = Cursors.Default
'
End Sub
'
Private Sub btnEliminar_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles btnEliminar.Click
' Eliminar del registro la entrada seleccionada
' si la subclave 1 y 2 del listview es la misma, será un fichero
If Me.lvEnInicio.SelectedItems.Count > 0 Then
Dim lvItem As ListViewItem = Me.lvEnInicio.SelectedItems(0)
Dim s As String
'
If lvItem.SubItems(1).Text = lvItem.SubItems(2).Text Then
s = lvItem.SubItems(1).Text
If MessageBox.Show("¿Quieres borrar el fichero:" & vbCrLf & _
s & "?", "Eliminar clave del registro", _
MessageBoxButtons.YesNo, MessageBoxIcon.Question, _
MessageBoxDefaultButton.Button2 _
) = DialogResult.Yes Then
Try
File.Delete(s)
mostrarEnInicio()
Catch ex As Exception
MessageBox.Show(Me, "Error: " & ex.Message, "Error al eliminar un programa", _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
End If
Else
s = lvItem.SubItems(2).Text & "\" & lvItem.Text
If MessageBox.Show("¿Quieres borrar el valor del registro:" & vbCrLf & _
s & "?", "Eliminar clave del registro", _
MessageBoxButtons.YesNo, MessageBoxIcon.Question, _
MessageBoxDefaultButton.Button2 _
) = DialogResult.Yes Then
Try
Dim regKey As RegistryKey
'
If s.StartsWith("HKEY_LOCAL_MACHINE\") Then
regKey = Registry.LocalMachine.OpenSubKey( _
"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True)
ElseIf s.StartsWith("HKEY_USERS\") Then
regKey = Registry.Users.OpenSubKey( _
".DEFAULT\Software\Microsoft\Windows\CurrentVersion\Run", True)
ElseIf s.StartsWith("HKEY_CURRENT_USER\") Then
regKey = Registry.CurrentUser.OpenSubKey( _
"Software\Microsoft\Windows\CurrentVersion\Run", True)
End If
regKey.DeleteValue(lvItem.Text)
regKey.Close()
mostrarEnInicio()
Catch ex As Exception
MessageBox.Show(Me, "Error: " & ex.Message, _
"Error al eliminar un programa del registro", _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
End If
End If
End If
End Sub
'
Private Sub mostrarEnInicio()
Dim s As String
Dim regKey As RegistryKey
'
lvEnInicio.Items.Clear()
'
' leer los programas de la clave:
' HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
regKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run")
For Each s In regKey.GetValueNames
With lvEnInicio.Items.Add(s)
.SubItems.Add(regKey.GetValue(s).ToString)
.SubItems.Add(regKey.Name)
End With
Next
regKey.Close()
'
' HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Run
regKey = Registry.Users.OpenSubKey(".DEFAULT\Software\Microsoft\Windows\CurrentVersion\Run")
For Each s In regKey.GetValueNames
With lvEnInicio.Items.Add(s)
.SubItems.Add(regKey.GetValue(s).ToString)
.SubItems.Add(regKey.Name)
End With
Next
regKey.Close()
'
' HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
regKey = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run")
For Each s In regKey.GetValueNames
With lvEnInicio.Items.Add(s)
.SubItems.Add(regKey.GetValue(s).ToString)
.SubItems.Add(regKey.Name)
End With
Next
regKey.Close()
'
' mostrar los programas en el menú de inicio de todos los usuarios
' HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
regKey = Registry.LocalMachine.OpenSubKey( _
"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
s = regKey.GetValue("Common Startup").ToString
'
Dim dirInicio As New DirectoryInfo(s)
Dim ficInfo As FileInfo
For Each ficInfo In dirInicio.GetFiles
s = ficInfo.FullName
' para no mostrar los ocultos
'If (ficInfo.Attributes And FileAttributes.Hidden) <> FileAttributes.Hidden Then
If s.IndexOf("desktop.ini") = -1 Then
With lvEnInicio.Items.Add(Path.GetFileNameWithoutExtension(s))
.SubItems.Add(s)
.SubItems.Add(s)
End With
End If
Next
regKey.Close()
'
' mostrar los programas en el menú de inicio del usuario actual
regKey = Registry.CurrentUser.OpenSubKey( _
"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
s = regKey.GetValue("Startup").ToString
dirInicio = New DirectoryInfo(s)
For Each ficInfo In dirInicio.GetFiles
s = ficInfo.FullName
If s.IndexOf("desktop.ini") = -1 Then
With lvEnInicio.Items.Add(Path.GetFileNameWithoutExtension(s))
.SubItems.Add(s)
.SubItems.Add(s)
End With
End If
Next
regKey.Close()
'
End Sub
'
Private Sub lvEnInicio_ColumnClick(ByVal sender As Object, _
ByVal e As System.Windows.Forms.ColumnClickEventArgs) _
Handles lvEnInicio.ColumnClick
If lvEnInicio.Sorting = SortOrder.Ascending Then
lvEnInicio.Sorting = SortOrder.Descending
Else
lvEnInicio.Sorting = SortOrder.Ascending
End If
lvEnInicio.Sort()
End Sub
'
Private Sub lvEnEjecucion_ColumnClick(ByVal sender As Object, _
ByVal e As System.Windows.Forms.ColumnClickEventArgs) _
Handles lvEnEjecucion.ColumnClick
If lvEnEjecucion.Sorting = SortOrder.Ascending Then
lvEnEjecucion.Sorting = SortOrder.Descending
Else
lvEnEjecucion.Sorting = SortOrder.Ascending
End If
lvEnEjecucion.Sort()
End Sub
Private Sub btnRefrescarInicio_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnRefrescarInicio.Click
mostrarEnInicio()
End Sub
End Class
|