Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: dashrender en 25 Febrero 2009, 19:51 pm



Título: [Duda] detectar proceso activo
Publicado por: dashrender en 25 Febrero 2009, 19:51 pm
Hola amigos q tal.. tengo una duda ... si se podria detectar en vB tal proceso activo por ejemplo : svchost.exe ...  si esta activo en un textbox q salga ON si no OFF


Título: Re: [Duda] detectar proceso activo
Publicado por: xkiz ™ en 25 Febrero 2009, 19:59 pm
mira este Link: http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/42.htm (http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/42.htm)


Título: Re: [Duda] detectar proceso activo
Publicado por: seba123neo en 26 Febrero 2009, 02:19 am
Hola, proba algo asi:

Código
  1. Option Explicit
  2.  
  3. Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  4. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  5. Private Declare Function EnumProcesses Lib "PSAPI.DLL" (lpidProcess As Long, ByVal cb As Long, cbNeeded As Long) As Long
  6. Private Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hProcess As Long, lphModule As Long, ByVal cb As Long, lpcbNeeded As Long) As Long
  7. Private Declare Function GetModuleBaseName Lib "PSAPI.DLL" Alias "GetModuleBaseNameA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
  8. Private Const PROCESS_VM_READ = &H10
  9. Private Const PROCESS_QUERY_INFORMATION = &H400
  10.  
  11. Private Function EstaCorriendo(ByVal NombreDelProceso As String) As Boolean
  12.    Const MAX_PATH As Long = 260
  13.    Dim lProcesses() As Long, lModules() As Long, N As Long, lRet As Long, hProcess As Long
  14.    Dim sName As String
  15.    NombreDelProceso = UCase$(NombreDelProceso)
  16.    ReDim lProcesses(1023) As Long
  17.  
  18.    If EnumProcesses(lProcesses(0), 1024 * 4, lRet) Then
  19.        For N = 0 To (lRet \ 4) - 1
  20.            hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lProcesses(N))
  21.            If hProcess Then
  22.                ReDim lModules(1023)
  23.                If EnumProcessModules(hProcess, lModules(0), 1024 * 4, lRet) Then
  24.                    sName = String$(MAX_PATH, vbNullChar)
  25.                    GetModuleBaseName hProcess, lModules(0), sName, MAX_PATH
  26.                    sName = Left$(sName, InStr(sName, vbNullChar) - 1)
  27.                    If Len(sName) = Len(NombreDelProceso) Then
  28.                        If NombreDelProceso = UCase$(sName) Then EstaCorriendo = True: Exit Function
  29.                    End If
  30.                End If
  31.            End If
  32.            CloseHandle hProcess
  33.        Next N
  34.    End If
  35. End Function
  36.  
  37. Private Sub Command1_Click()
  38.    MsgBox EstaCorriendo("calc.exe")
  39. End Sub
  40.  

saludos.


Título: Re: [Duda] detectar proceso activo
Publicado por: ricardovinzo en 26 Febrero 2009, 03:36 am
Una mas:

http://foro.code-makers.es/mlitleprocmanager_para_trabajar_con_procesos-t2361.0.html


Título: Re: [Duda] detectar proceso activo
Publicado por: Dessa en 27 Febrero 2009, 11:01 am
hola dashrender, en el caso que en lugar de ser un proceso (como svchost.exe), busques una aplicación (oculta o visible), pňdes usar solamente FindWindows.

PD: Buen code Seba

Saludos



Título: Re: [Duda] detectar proceso activo
Publicado por: dashrender en 4 Marzo 2009, 15:52 pm
hola seba123neo   el codigo q me daste es genial funciona de maravillas.. me podrias ayudar en vez de que salga en msgbox "falso" o "verdadero" pueda salir en un label? pero que se actualize si ese "proceso" esta "activo" o "no" sin darle click ...


Título: Re: [Duda] detectar proceso activo
Publicado por: Dessa en 4 Marzo 2009, 16:38 pm
Código:

Option Explicit

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function EnumProcesses Lib "PSAPI.DLL" (lpidProcess As Long, ByVal cb As Long, cbNeeded As Long) As Long
Private Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hProcess As Long, lphModule As Long, ByVal cb As Long, lpcbNeeded As Long) As Long
Private Declare Function GetModuleBaseName Lib "PSAPI.DLL" Alias "GetModuleBaseNameA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
Private Const PROCESS_VM_READ = &H10
Private Const PROCESS_QUERY_INFORMATION = &H400

Private Function EstaCorriendo(ByVal NombreDelProceso As String) As Boolean
Const MAX_PATH As Long = 260
Dim lProcesses() As Long, lModules() As Long, N As Long, lRet As Long, hProcess As Long
Dim sName As String
NombreDelProceso = UCase$(NombreDelProceso)
ReDim lProcesses(1023) As Long

If EnumProcesses(lProcesses(0), 1024 * 4, lRet) Then
For N = 0 To (lRet \ 4) - 1
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lProcesses(N))
If hProcess Then
ReDim lModules(1023)
If EnumProcessModules(hProcess, lModules(0), 1024 * 4, lRet) Then
sName = String$(MAX_PATH, vbNullChar)
GetModuleBaseName hProcess, lModules(0), sName, MAX_PATH
sName = Left$(sName, InStr(sName, vbNullChar) - 1)
If Len(sName) = Len(NombreDelProceso) Then
If NombreDelProceso = UCase$(sName) Then EstaCorriendo = True: Exit Function
End If
End If
End If
CloseHandle hProcess
Next N
End If
End Function



Private Sub Form_Load()
Timer1.Interval = 300
Label1 = ""
End Sub

Private Sub Timer1_Timer()
If EstaCorriendo("calc.exe") = True Then
  Label1 = "ACTIVO"
Else
  Label1 = "INACTIVO"
End If
End Sub