Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Como saber si un .exe de 64 bits se esta ejecuantando

Estas en el tema de Como saber si un .exe de 64 bits se esta ejecuantando en el foro de Visual Basic clásico en Foros del Web. hola, tengo este código de visual basic 6 me funciona perfecto, pero solo funciona para 32 bits y no para 64 bits @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...
  #1 (permalink)  
Antiguo 14/04/2015, 06:36
 
Fecha de Ingreso: diciembre-2013
Mensajes: 81
Antigüedad: 10 años, 10 meses
Puntos: 1
Como saber si un .exe de 64 bits se esta ejecuantando

hola, tengo este código de visual basic 6
me funciona perfecto, pero solo funciona para 32 bits y no para 64 bits

Código vb:
Ver original
  1. Option Explicit
  2. Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  3. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  4. Private Declare Function EnumProcesses Lib "PSAPI.DLL" (lpidProcess As Long, ByVal cb As Long, cbNeeded As Long) As Long
  5. Private Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hProcess As Long, lphModule As Long, ByVal cb As Long, lpcbNeeded As Long) As Long
  6. 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
  7. Private Const PROCESS_VM_READ = &H10
  8. Private Const PROCESS_QUERY_INFORMATION = &H400
  9.  
  10. Private Function EstaCorriendo(ByVal NombreDelProceso As String) As Boolean
  11.     Const MAX_PATH As Long = 260
  12.     Dim lProcesses() As Long, lModules() As Long, N As Long, lRet As Long, hProcess As Long
  13.     Dim sName As String
  14.     NombreDelProceso = UCase$(NombreDelProceso)
  15.     ReDim lProcesses(1023) As Long
  16.  
  17.     If EnumProcesses(lProcesses(0), 1024 * 4, lRet) Then
  18.         For N = 0 To (lRet \ 4) - 1
  19.             hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lProcesses(N))
  20.             If hProcess Then
  21.                 ReDim lModules(1023)
  22.                 If EnumProcessModules(hProcess, lModules(0), 1024 * 4, lRet) Then
  23.                     sName = String$(MAX_PATH, vbNullChar)
  24.                     GetModuleBaseName hProcess, lModules(0), sName, MAX_PATH
  25.                     sName = Left$(sName, InStr(sName, vbNullChar) - 1)
  26.  
  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.     If EstaCorriendo("DTEPlanoWS.exe") Then
  39.          MsgBox "El programa está en ejecución"
  40.     Else
  41.          MsgBox "El programa NO está en ejecución"
  42.     End If
  43. End Sub
  #2 (permalink)  
Antiguo 16/04/2015, 16:23
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 3 meses
Puntos: 29
Respuesta: Como saber si un .exe de 64 bits se esta ejecuantando

Esto parece funcionar bien, y no necesita nada mas:

Código vb:
Ver original
  1. Function getProcessInfo(ByVal EXEName As String) As Boolean
  2.   Dim objProcess As Object, process As Object, strNameOfUser As String, ComputerName As String
  3.   getProcessInfo = False
  4.   ComputerName = "."
  5.   Set objProcess = GetObject("winmgmts:{impersonationLevel=impersonate}\\" _
  6.   & ComputerName & "\root\cimv2").ExecQuery("Select * From Win32_Process")
  7.   For Each process In objProcess
  8.     If UCase(process.Name) = UCase(EXEName) Then
  9.       getProcessInfo = True
  10.     End If
  11.   Next
  12.   Set objProcess = Nothing
  13. End Function

Hasta le sobra alguna variable...

Saludos
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Etiquetas: .net, basic, bits, exe, programa, visual
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:31.