SoloCodigo
Programación General => Visual Basic 6.0 e inferiores => Mensaje iniciado por: ElTaque en Jueves 28 de Agosto de 2003, 18:46
-
se que con ShellExecute puedo ejecutar un programa y si alguien los nesesita se lo puedo pasar, pero lo que quisiera ahora es saber si puedo cerrar un programa que se encuentra activo y ¿como poder hacerlo?
también si es posible saber cual es el programa que se está ejecutando.....
muchas Gracias.-
Gerardo
Uruguay-America del Sur:think:
-
Si el programa lo iniciaste tú, fijate en este ejemplo que ejecuta un programa y si en 1 minuto no acaba por si solo, lo finaliza:
Private Declare Function OpenProcess Lib "Kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long
Private Declare Function GetExitCodeProcess Lib "Kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Sub Someter()
Const STILL_ACTIVE = &H103
Const PROCESS_QUERY_INFORMATION = &H400
Dim lng1 As Long, lngRc As Long
Dim intCta as Integer, lngExitCode as long
lng1 = OpenProcess(PROCESS_QUERY_INFORMATION, False, Shell("MiPrograma.Exe", vbNormalFocus))
Do
GetExitCodeProcess lng1, lngRc
intCta = intCta + 1
if intCta > 60 Then
lngRc = TerminateProcess(lng1 , lngExitCode)
Exit Do
Else
Sleep 1000
DoEvents
End If
Loop While lngRc = STILL_ACTIVE
End Sub
Suerte.
-
El siguiente código te permite recuperar como elementos de una matriz las distintas aplicaciones activas.
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 * 260
End Type
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID 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 Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
Private Type TareaActiva
Id As Long
ExeFile As String
End Type
Private Tareas() As TareaActiva
Private Sub ObtenerProcesos()
Dim lngSnapShot As Long
Dim Proceso As PROCESSENTRY32
Dim lngRc As Long, lngCta As Long
lngSnapShot = CreateToolhelpSnapshot(2&, 0&)
If lngSnapShot <> 0 Then
Proceso.dwSize = Len(Proceso)
lngRc = ProcessFirst(lngSnapShot, Proceso)
Do While lngRc
lngCta = lngCta + 1
ReDim Preserve Tareas(1 To lngCta)
Tareas(lngCta).Id = Proceso.th32ProcessID
Tareas(lngCta).ExeFile = Left(Proceso.szExeFile, InStr(Proceso.szExeFile, Chr(0)) - 1)
lngRc = ProcessNext(lngSnapShot, Proceso)
Loop
CloseHandle lngSnapShot
End If
End Sub
Suerte.