• Lunes 23 de Diciembre de 2024, 09:39

Autor Tema:  Re: ¿como sierro (por codigo) un programa que se está ejecut  (Leído 889 veces)

ElTaque

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: ¿como sierro (por codigo) un programa que se está ejecut
« en: Jueves 28 de Agosto de 2003, 18:46 »
0
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:

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: ¿como sierro (por codigo) un programa que se está ejecut
« Respuesta #1 en: Viernes 29 de Agosto de 2003, 09:47 »
0
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.

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
¿como sierro (por codigo) un programa que se está ejecutando
« Respuesta #2 en: Viernes 29 de Agosto de 2003, 09:52 »
0
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.