elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  VB6: Problema con función "ProcessExists"
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: VB6: Problema con función "ProcessExists"  (Leído 2,220 veces)
Progmasterbr

Desconectado Desconectado

Mensajes: 18


Ver Perfil
VB6: Problema con función "ProcessExists"
« en: 24 Noviembre 2015, 14:58 pm »

Buen día amigos,

Tengo dos funciones que sirven para verificar si un proceso que ya está en marcha, pero return false cuando el proceso se está ejecutando.

¿Podría alguien ayudarme con esto, por favor?

Aquí dejo las funciones que estoy utilizando:

Código:


''''''''''''''''''''''''''''''''' PROCESS EXISTS '''''''''''''''''''''

Private Const MAX_PATH = 260
Private Const PROCESS_QUERY_INFORMATION = &H400

Private Declare Function OpenProcess Lib "kernel32" ( _
    ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID 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 Type PROCESSENTRY32
    dwSize As Long
    cntUsage As Long
    th32ProcessID As Long
    th32DefaultHeapID As Long
    th32ModuleID As Long
    cntThreads As Long
    th32ParentProcessID As Long
    pcPriClassBase As Long
    dwFlags As Long
    szExeFile As String * MAX_PATH
End Type
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
    Private Const TH32CS_SNAPPROCESS As Long = 2&
    Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


Private Function FindProcessID(ByVal pExename As String) As Long

    Dim ProcessID As Long, hSnapshot As Long
    Dim uProcess As PROCESSENTRY32, rProcessFound As Long
    Dim Pos As Integer, szExename As String
    
    hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
    
    If hSnapshot = -1 Then
        Exit Function
    End If
    
    uProcess.dwSize = Len(uProcess)
    
    rProcessFound = ProcessFirst(hSnapshot, uProcess)
    Do While rProcessFound
        Pos = InStr(1, uProcess.szExeFile, vbNullChar)
        If Pos Then
            szExename = Left$(uProcess.szExeFile, Pos - 1)
        End If
        If LCase$(szExename) = LCase$(pExename) Then
            
            ProcessID = uProcess.th32ProcessID
            Exit Do
          Else
            
            rProcessFound = ProcessNext(hSnapshot, uProcess)
        End If
    Loop
    CloseHandle hSnapshot
    FindProcessID = ProcessID

End Function

Private Function IsProcessRunning2(PID As Long) As Boolean
Dim hProcess As Long
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0, PID)
CloseHandle hProcess
IsProcessRunning2 = hProcess
End Function

 
Private Function IsProcessRunning(ByVal sProcess 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
    
    sProcess = UCase$(sProcess)
    
    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(sProcess) Then
                        If sProcess = UCase$(sName) Then IsProcessRunning = True: Exit Function
                    End If
                End If
            End If
            CloseHandle hProcess
        Next N
    End If
End Function




Desde ya muchas gracias


« Última modificación: 24 Noviembre 2015, 15:00 pm por Progmasterbr » En línea

LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


Ver Perfil WWW
Re: VB6: Problema con función "ProcessExists"
« Respuesta #1 en: 24 Noviembre 2015, 16:05 pm »

Hola es por un tema de privilegios. para ello tenes que darle ciertos privilegios a tu proceso pega en un modulo bas este codigo

Código
  1. Option Explicit
  2. Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
  3. Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
  4. Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As Luid) As Long
  5. Private Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As Any, ReturnLength As Long) As Long
  6.  
  7. Private Type Luid
  8.    lowpart                     As Long
  9.    highpart                    As Long
  10. End Type
  11.  
  12. Private Type LUID_AND_ATTRIBUTES
  13.    pLuid                       As Luid
  14.    Attributes                  As Long
  15. End Type
  16.  
  17. Private Type TOKEN_PRIVILEGES
  18.    PrivilegeCount              As Long
  19.    Privileges(1)               As LUID_AND_ATTRIBUTES
  20. End Type
  21.  
  22. Private Const TOKEN_ADJUST_PRIVILEGES           As Long = &H20
  23. Private Const TOKEN_QUERY                       As Long = &H8
  24. Private Const SE_PRIVILEGE_ENABLED              As Long = &H2
  25. Private Const SE_DEBUG_NAME                     As String = "SeDebugPrivilege"
  26.  
  27. Public Function AdjustPrivileges() As Boolean
  28.    Dim lToken              As Long
  29.    Dim tTOKEN_PRIVILEGES   As TOKEN_PRIVILEGES
  30.    Dim lProcessID          As Long
  31.  
  32.    lProcessID = GetCurrentProcess
  33.    If Not OpenProcessToken(lProcessID, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, lToken) = 0 Then
  34.        With tTOKEN_PRIVILEGES
  35.            If LookupPrivilegeValue(vbNullString, SE_DEBUG_NAME, .Privileges(0).pLuid) = 0 Then
  36.                Exit Function
  37.            End If
  38.            .PrivilegeCount = 1
  39.            .Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
  40.        End With
  41.        If Not AdjustTokenPrivileges(lToken, 0, tTOKEN_PRIVILEGES, Len(tTOKEN_PRIVILEGES), 0&, 0&) = 0 Then
  42.            AdjustPrivileges = True
  43.        End If
  44.    End If
  45. End Function

luego en el form load llama a  AdjustPrivileges,
y la funcion IsProcessRunning anda bien.

Saludos.


En línea

Progmasterbr

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: VB6: Problema con función "ProcessExists"
« Respuesta #2 en: 24 Noviembre 2015, 16:44 pm »

LeandroA,

El problema sigue apareciendo.
aquí está mi proyecto http://tempsend.com/370CC8ED77, y cómo me estoy tratando de verificar si un determinado programa se está ejecutando.
En línea

LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


Ver Perfil WWW
Re: VB6: Problema con función "ProcessExists"
« Respuesta #3 en: 24 Noviembre 2015, 17:42 pm »

Hola perdona me estoy llendo al trabajo pero veo que pasaste un rar de 22mb que para solo comprobar  si un exe se esta ejecutando? mira yo creo que con lo que tenes antes tiene que funcionar sino decime cual es el ejcutable en cuestion
En línea

Progmasterbr

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: VB6: Problema con función "ProcessExists"
« Respuesta #4 en: 24 Noviembre 2015, 18:32 pm »

LeandroA,

las funciones anteriores no reconocen el nombre de mi programa para comprobar, por lo que cuando se está ejecutando, dicen que no es cierto (falso).

Usted puede tratar de ver el nombre de su programa hecho en VB.NET (mi caso) no está funcionando. Ahora con otro programa funciona bien (por ejemplo, "chrome.exe").

Es decir, las funciones anteriores fallan para verificar algunos nombres de proceso. :-(
« Última modificación: 24 Noviembre 2015, 18:39 pm por Progmasterbr » En línea

LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


Ver Perfil WWW
Re: VB6: Problema con función "ProcessExists"
« Respuesta #5 en: 25 Noviembre 2015, 13:57 pm »

hola por lo que vi estas llamando mal la funcion

Incorrecto

Código:
MsgBox IsProcessRunning(FindProcessID("teste.exe"))

IsProcessRunning requiere el nombre del proceso (string) no el id por lo que no es necesario llamar a findprocessID, Ó como quieras puedes usar findprocessID  y si este retorna <>  0 quiere decir que el proceso esta en ejecucion

Código:
MsgBox IsProcessRunning("teste.exe")

o

Código:
MsgBox FindProcessID("teste.exe") <> 0
En línea

Lekim

Desconectado Desconectado

Mensajes: 268



Ver Perfil
Re: VB6: Problema con función "ProcessExists"
« Respuesta #6 en: 25 Noviembre 2015, 18:49 pm »

Hola
Solo necesitas esto, tal cual...(Sin declaraciones API)

Código
  1. Public Function ToKnowIfAppIsActive(strAppName As String) As Boolean
  2. Dim IdProceso As Long
  3.  Dim ListaProcesos  As Object
  4.  Dim ObjetoWMI    As Object
  5.  Dim Proceso   As Object
  6.  Dim NameProcess As String
  7.  
  8.  
  9.  Set ObjetoWMI = GetObject("winmgmts:")
  10. If IsNull(ObjetoWMI) = False Then
  11.  Set ListaProcesos = ObjetoWMI.InstancesOf("win32_process")
  12.  
  13.  For Each Proceso In ListaProcesos
  14.        NameProcess = Proceso.Name
  15.        IdProceso = Proceso.ProcessID
  16.            If NameProcess = strAppName Then
  17.                ToKnowIfAppIsActive = True
  18.                Exit For
  19.            Else
  20.                ToKnowIfAppIsActive = False
  21.            End If
  22.    Next
  23. End If
  24.  
  25. End Function

Por si no lo sabías te comento  que Chrome.exe es una aplicación especial. Si ejecutas el Administrador de Tareas de windows (Ctrl + R y escribe taskmgr.exe) y luego miras en la pestaña 'Procesos', verás que la lista de procesos hay más de un Chrome.exe ejecutándose.  Así que si tienes que encontrar la ventana principal debes buscar la ventana de chrome cuyo nombre de clase  (ClassName) sea "Chrome_WidgetWin_1"

sl2s
« Última modificación: 25 Noviembre 2015, 18:52 pm por Lekim » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con funcion "ChecaLiks" xD
PHP
Azielito 0 1,391 Último mensaje 15 Noviembre 2006, 21:09 pm
por Azielito
recursos visual basic, """"""proceso inmortal"""""
Análisis y Diseño de Malware
Dark4ngel 7 13,153 Último mensaje 3 Noviembre 2011, 10:42 am
por Dark4ngel
Problema Función "OpenProcess"
Programación C/C++
juancaa 5 2,403 Último mensaje 2 Febrero 2013, 23:54 pm
por juancaa
cambiar la funcion de las teclas "f1".."f12" permanentemente
Dudas Generales
anasosman 1 3,320 Último mensaje 13 Junio 2013, 01:51 am
por simorg
[PROBLEMA][javascript] estoy aprendiendo y me da error "funcion is not defined"
Desarrollo Web
Noxware 2 2,295 Último mensaje 6 Septiembre 2014, 17:29 pm
por Noxware
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines