Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

¿Cómo puedo cerrar un exe hecho en VFP desde Builder?

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: ¿Cómo puedo cerrar un exe hecho en VFP desde Builder? Responder citando

Saludos a todos en el foro, hace dias postee una duda y ahora la pongo de otra manera ya que me está volviendo loco este asunto...

Lo que necesito es poder cerrar un programa EXE desarrollado en Visual Fox Pro v9, desde una aplicación mia desarrollada en CBuilder 2007.

Originalmente lo hacía enviando un mensaje WM_CLOSE al handle de la ventana de cualquier EXE, el problema en concreto es que como VFP utiliza runtimes no puedo hacerlo de la misma manera, ya que me marca un error de seguridad.

Alguien me puede orientar de que otra manera puedo lograr mi objetivo a través de la API de windows sin tener problemas con el runtime?

Cualquier pista, ayuda o solución será de mucha ayuda.

Gracias de antemano.

Saludos
_________________
ISC
Dobermannmx
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Código:

int KillALLTask(String FileName)
{
    // Hay que añadir: #include <tlhelp32>
  try
  {
    bool ContinueLoop;
    HANDLE FSnapshotHandle;
    PROCESSENTRY32 FProcessEntry32;
    FSnapshotHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    FProcessEntry32.dwSize = sizeof(FProcessEntry32);
    ContinueLoop = Process32First(FSnapshotHandle, &FProcessEntry32);
    while (ContinueLoop)
    {
      if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) == UpperCase(FileName)) || (UpperCase(FProcessEntry32.szExeFile) == UpperCase(FileName)))
      {
        TerminateProcess(OpenProcess(PROCESS_TERMINATE, 0, FProcessEntry32.th32ProcessID), 0);
      }
      ContinueLoop = Process32Next(FSnapshotHandle, &FProcessEntry32);
    }
    CloseHandle(FSnapshotHandle);
    return 0;
  }
  catch(Exception &e)
  {
    fdebug("No se pueden martar los procesos: "+e.Message,"MatarProcesos.log");
  }
}


para usarlo pones en la funcion el nombre del ejecutable por ejemplo "programa.exe" y mueren todos los procesos instanciados.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Muchas Gracias ZHAX1, pues en verdad estaba ciclado con este asunto y necesitaba una idea fresca como la tuya, voy a probarlo.

Salu2
_________________
ISC
Dobermannmx
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

ZHAX1 funciona de maravilla, en verdad 1'000,000 de gracias pues además de solucionar mi problema encontré otro error que tenía en mi código Laughing

Te debo una

Saludos
_________________
ISC
Dobermannmx
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.