Cerrar Ejecutable externo

Cerrar Ejecutable externo

Postby JoseAlvarez » Fri Oct 08, 2021 9:18 pm

Hola a todos amigos del foro.

Estoy utilizando el programa de terceros LTFViewr5u.exe para hacer un preview con la clase TDosPrn

Todo funciona muy bien, solo que al salir del modulo que lo llama, debo cerrarlo manualmente como es logico, ya que es una aplicacion de terceros.

Alguna manera de cerrarlo desde mi sistema?

Gracias por la ayuda que puedan prestarme
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 800
Joined: Sun Nov 09, 2014 5:01 pm

Re: Cerrar Ejecutable externo

Postby hmpaquito » Fri Oct 08, 2021 9:29 pm

c:= "TaskKill /IM LTFViewr5u.exe"
RUN &c
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Cerrar Ejecutable externo

Postby karinha » Fri Oct 08, 2021 9:33 pm

Intenta con:

Code: Select all  Expand view  RUN

   SendMessage( FindWindow( 0, "LTFViewr5u" ), WM_CLOSE )
 


Regards, saludos
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7843
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Cerrar Ejecutable externo

Postby JoseAlvarez » Sat Oct 09, 2021 1:15 am

Estimados amigos,

Ninguna de las dos opciones funcionaron.

La de Joao se ejectua sin problemas pero no cierra el .exe

La de hmpaquito arroja error en RUN &C
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 800
Joined: Sun Nov 09, 2014 5:01 pm

Re: Cerrar Ejecutable externo

Postby Baxajaun » Sat Oct 09, 2021 9:09 am

Buenos días !!!

José mira si en este hilo puedes encontrar lo que buscas:

https://groups.google.com/g/harbour-users/c/FCyLEly6l-0

Muchas gracias.

Saludos,
User avatar
Baxajaun
 
Posts: 968
Joined: Wed Oct 19, 2005 2:17 pm
Location: Gatika. Bizkaia

Re: Cerrar Ejecutable externo

Postby Baxajaun » Sat Oct 09, 2021 9:14 am

También se podría ajustar el siguiente código a Harbour

Code: Select all  Expand view  RUN
#include <windows.h>
#include <process.h>
#include <Tlhelp32.h>
#include <winbase.h>
#include <string.h>
void killProcessByName(const char *filename)
{
    HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
    PROCESSENTRY32 pEntry;
    pEntry.dwSize = sizeof (pEntry);
    BOOL hRes = Process32First(hSnapShot, &pEntry);
    while (hRes)
    {
        if (strcmp(pEntry.szExeFile, filename) == 0)
        {
            HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, 0,
                                          (DWORD) pEntry.th32ProcessID);
            if (hProcess != NULL)
            {
                TerminateProcess(hProcess, 9);
                CloseHandle(hProcess);
            }
        }
        hRes = Process32Next(hSnapShot, &pEntry);
    }
    CloseHandle(hSnapShot);
}


Ejemplo:

Code: Select all  Expand view  RUN
int main()
{
    killProcessByName("notepad++.exe");
    return 0;
}


Sacado de Stackoverflow https://stackoverflow.com/questions/7956519/how-to-kill-processes-by-name-win32-api

Muchas gracias.

Saludos,
User avatar
Baxajaun
 
Posts: 968
Joined: Wed Oct 19, 2005 2:17 pm
Location: Gatika. Bizkaia

Re: Cerrar Ejecutable externo

Postby Antonio Linares » Sun Oct 10, 2021 6:33 am

A petición de nuestro querido Felix:

Code: Select all  Expand view  RUN
function Main()

   KillProcessByName( "notepad.exe" )

return nil

#pragma BEGINDUMP

#include <Windows.h>
#include <hbapi.h>
#include <string.h>
#include <tlhelp32.h>

void killProcessByName(const char *filename)
{
    HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
    PROCESSENTRY32 pEntry;
    BOOL hRes;

    pEntry.dwSize = sizeof (pEntry);
    hRes = Process32First(hSnapShot, &pEntry);
   
    while (hRes)
    {
        if (strcmp(pEntry.szExeFile, filename) == 0)
        {
            HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, 0,
                                          (DWORD) pEntry.th32ProcessID);
            if (hProcess != NULL)
            {
                TerminateProcess(hProcess, 9);
                CloseHandle(hProcess);
            }
        }
        hRes = Process32Next(hSnapShot, &pEntry);
    }
    CloseHandle(hSnapShot);
}

HB_FUNC( KILLPROCESSBYNAME )
{
   killProcessByName( hb_parc( 1 ) );
}

#pragma ENDDUMP
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42126
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Cerrar Ejecutable externo

Postby acuellar » Sun Oct 10, 2021 1:24 pm

Estimados

Lo hago así
Code: Select all  Expand view  RUN

 WinExec("tskill  programa.exe",0)
 


También hay ésta forma.
Code: Select all  Expand view  RUN

FUNCTION CerrarProceso(cProceso)
  Local oWMIob, oWMIserver, aProcess, objProcess

  TRY
    oWMIob := CreateObject( "wbemScripting.SwbemLocator" )
    catch
    RETURN nil
  END
  oWMIserver := oWMIob:ConnectServer()
  aProcess :=oWMIserver:ExecQuery( "Select * from Win32_Process" )
  For Each objProcess in aProcess
    IF UPPER(objProcess:Name) = UPPER(cProceso)
      objProcess:Terminate()
    Endif
  Next

Return nil
 
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1644
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Cerrar Ejecutable externo

Postby JoseAlvarez » Sun Oct 10, 2021 2:49 pm

Hola a Todos,

Muchas Gracias a los que se avocaron a mi solicitud.
probé todas las opciones sugeridas y ninguna me habia funcionado. La que hizo el Master Linares adaptando la idea sugerida de baxajuan, funcionó perfecto.

Ademar, probé tu sugerencia y no quiso funcionar. Le coloque la A a la palabra Taskill que me imagino que la tecla se te escapó, pero aún asi no cerró el .exe

Antes habia solventado de manera poco elegante con esta funcion que me inventé,

Code: Select all  Expand view  RUN
Static Function Fnct_ClosePreview()

    Local cCommand, cBat

    cCommand  := 'taskkill /f /im LTFViewr5u.exe'
    cBat := fcreate( '_3.bat' ); fwrite( cBat,  cCommand )  ; fclose( cBat )
    WaitRun( ('_3.bat'), 0 )
    FErase ( '_3.bat' )

return .t.

 


Por supuesto ya la deseché.

Agradecido con todos, un abrazo.
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 800
Joined: Sun Nov 09, 2014 5:01 pm

Re: Cerrar Ejecutable externo

Postby Baxajaun » Sun Oct 10, 2021 4:40 pm

Hola José !

Me alegra saber que ha funcionado la función encontrada en stackoverflow, pero ten en cuenta, como dice en el hilo de dónde se ha sacado la función que es sensible a minúsculas y mayúsculas.

Saludos,
User avatar
Baxajaun
 
Posts: 968
Joined: Wed Oct 19, 2005 2:17 pm
Location: Gatika. Bizkaia

Re: Cerrar Ejecutable externo

Postby JoseAlvarez » Sun Oct 10, 2021 5:21 pm

Baxajaun wrote:Hola José !

Me alegra saber que ha funcionado la función encontrada en stackoverflow, pero ten en cuenta, como dice en el hilo de dónde se ha sacado la función que es sensible a minúsculas y mayúsculas.

Saludos,


Gracias amigo, lo tengo en cuenta
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 800
Joined: Sun Nov 09, 2014 5:01 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 73 guests