elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 03:04  


Tema destacado: Entra al canal IRC oficial de #elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  [SOLUCIONADO] Cerrar aplicación C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO] Cerrar aplicación C++  (Leído 1,907 veces)
asesino88

Desconectado Desconectado

Mensajes: 26


Ver Perfil
[SOLUCIONADO] Cerrar aplicación C++
« en: 23 Junio 2008, 12:05 »

Hola a todos.

Mi duda es la siguiente: ¿Cómo puedo cerrar una aplicación en C++? o sea, me refiero a que por ejemplo utilizando la función
Código:
ShellExecute(NULL, "open", URL, NULL, NULL, SW_SHOWNORMAL);
que abre el navegador de internet con una url, ¿cómo hago para cerrar el navegador? ¿es cambiando "open" por "close" en la función o hay otra manera mucho mejor? Gracias.

Saludos


« Última modificación: 26 Junio 2008, 13:25 por asesino88 » En línea
byebye


Desconectado Desconectado

Mensajes: 5.093



Ver Perfil
Re: Cerrar aplicación C++
« Respuesta #1 en: 23 Junio 2008, 12:48 »

terminateprocess


En línea
HySTD

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Cerrar aplicación C++
« Respuesta #2 en: 23 Junio 2008, 13:31 »

También puedes usar CloseHandle. De algún modo u otro necesitas conocer el Handle del proceso que quieres manipular (cerrar).

Un saludo.
En línea
asesino88

Desconectado Desconectado

Mensajes: 26


Ver Perfil
Re: Cerrar aplicación C++
« Respuesta #3 en: 23 Junio 2008, 15:33 »

Hola

- Para ®®
He mirado esta función
Código:
BOOL WINAPI TerminateProcess(
  __in  HANDLE hProcess,
  __in  UINT uExitCode
);
pero no sé como usarla. ¿ Puedes mostrar algún código de como cerrar, por ejemplo, mozilla firefox ?

- Para HySTD
¿ Cómo puedo averiguar cuál es el Handle de un programa para poder hacer CloseHandle ?

Gracias a ambos.
Saludos
En línea
byebye


Desconectado Desconectado

Mensajes: 5.093



Ver Perfil
Re: Cerrar aplicación C++
« Respuesta #4 en: 23 Junio 2008, 16:00 »

Citar
HANDLE p;
 
 p=OpenProcess(PROCESS_ALL_ACCESS,0,GetCurrentProcessId());
 TerminateProcess(p,0);

cierra tu propio proceso.

PD: closehandle que yo sepa no termina el proceso.
En línea
rog

Desconectado Desconectado

Mensajes: 39


Ver Perfil
Re: Cerrar aplicación C++
« Respuesta #5 en: 23 Junio 2008, 16:34 »

yo uso el struct ShellExecuteInfo

Código:
SHELLEXECUTEINFO bfghijlnos;
memset(&bfghijlnos, 0, sizeof(bfghijlnos));
bfghijlnos.cbSize       = sizeof(bfghijlnos);
bfghijlnos.fMask        = SEE_MASK_NOCLOSEPROCESS;         
//bfghijlnos.fMask        = 0;         
bfghijlnos.hwnd         = 0;               
bfghijlnos.lpVerb       = "open"; 
bfghijlnos.lpFile       = command;
bfghijlnos.lpParameters = parameter;
bfghijlnos.lpDirectory  = NULL;
if(windows_status == 5)
{
bfghijlnos.nShow = SW_HIDE;
}
else
{
bfghijlnos.nShow = SW_SHOW;
}
//
if(!ShellExecuteEx(&bfghijlnos))
{
//display_connection_failed();
return -1;
}
else
{
return 0;
}
}

para cierrar el child process : TerminateProcess(bfghijlnos.hProcess, 0);

rog
En línea
HySTD

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Cerrar aplicación C++
« Respuesta #6 en: 23 Junio 2008, 17:03 »

Citar
PD: closehandle que yo sepa no termina el proceso.

CloseHandle, no termina un proceso externo si se ejecuta en modo usuario (ring3), básicamente porque no puede acceder al espacio de memoria de dicho proceso. No obstante si libera los recursos ocupados por el proceso actual (o local). Es recomendable llamar a closehandle antes de llamar a terminateprocess.

Citar
Citar
HANDLE p;
 
 p=OpenProcess(PROCESS_ALL_ACCESS,0,GetCurrentProcessId());
 TerminateProcess(p,0);

cierra tu propio proceso.

Equivale a ExitProcess(0);

Un saludo
« Última modificación: 23 Junio 2008, 17:06 por HySTD » En línea
byebye


Desconectado Desconectado

Mensajes: 5.093



Ver Perfil
Re: Cerrar aplicación C++
« Respuesta #7 en: 23 Junio 2008, 17:31 »

Citar
CloseHandle, no termina un proceso externo si se ejecuta en modo usuario (ring3), básicamente porque no puede acceder al espacio de memoria de dicho proceso.

pues nunca lo he probado, si es cierto mejor asi no me como la cabea buscando pspterminateprocess.

Citar
Es recomendable llamar a closehandle antes de llamar a terminateprocess.


segun la documentacion no.
En línea
rog

Desconectado Desconectado

Mensajes: 39


Ver Perfil
Re: Cerrar aplicación C++
« Respuesta #8 en: 23 Junio 2008, 17:34 »

jeje

bfghijlnos.fMask        = SEE_MASK_NOCLOSEPROCESS;

yo no creio que closehandle puede cierrar el child process

my codigo

Código:
/*****************************************************************************************************
* check and close hprocess
******************************************************************************************************/
int check_n_close_hprocess(){
//
if(bfghijlnos.hProcess != NULL)
//if(bfghijlnos.hProcess != NULL)
{
if(TerminateProcess(bfghijlnos.hProcess, 0) == 0)
{
print_formatted_string("fermeture de la connection");
printf("impossible de terminer le process");
print_dot(10);
return 1;
}
else if(CloseHandle(bfghijlnos.hProcess) == 0)
{
print_formatted_string("fermeture de la connection");
printf("impossible de fermer la ressource connection");
print_dot(10);
return 1;
}
else
{
bfghijlnos.hProcess = NULL;
print_formatted_string("fermeture de la connection");
printf("connection closed");
print_dot(10);
return 0;
}
}
else
{
print_formatted_string("fermeture de la connection");
printf("connection introuvable");
print_dot(10);
return 0;
}
}



rog
En línea
HySTD

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Re: Cerrar aplicación C++
« Respuesta #9 en: 23 Junio 2008, 17:44 »

rog, no está documentada, porque no es "una norma". A ver, por poner un ejemplo, eso equivale a cuando creas objetos o instancias de una clase cualquiera, no estás obligado a liberarlos cuando ya no los utilices, (dependiendo del lenguaje, llamadas a Free, destroy, etc... de dicho objeto). Pero si es cierto que optimizas el código. Del mismo modo si no liberas esos objetos, cuando cierras la aplicación, todas las instancias de las clases y objetos creados por el proceso son liberados por el sistema operativo.

Remitiendonos a este caso, un hilo, un proceso, o cualquier objeto direccionable por un handle, es recomendable liberarlo manualmente. Si no lo haces tampoco pasa nada, ya que con TerminateProcess los recursos serán liberados por el SO, pero lo correcto es hacerlo así.

Un saludo
En línea
rog

Desconectado Desconectado

Mensajes: 39


Ver Perfil
Re: Cerrar aplicación C++
« Respuesta #10 en: 23 Junio 2008, 20:48 »

bueno compañero

el caso del flag "SEE_MASK_NOCLOSEPROCESS;"

e para non cierrar el child process no caso cierra el parent process

rog
En línea
asesino88

Desconectado Desconectado

Mensajes: 26


Ver Perfil
Re: Cerrar aplicación C++
« Respuesta #11 en: 25 Junio 2008, 16:55 »

Buenas, disculpad la demora, los exámenes me tienen liado ::)
He estado leyendo vuestras respuestas y tengo dudas:

- Para ®®
No sé como utilizar tu código
Código:
HANDLE p;
 
 p=OpenProcess(PROCESS_ALL_ACCESS,0,GetCurrentProcessId());
 TerminateProcess(p,0);
lo que creo entender es que asignas el ejecutable del main al proceso, pero lo que yo necesito no es cerrar mi proceso sino otro proceso como puede ser un navegador de internet o una carpeta. No sé si has entendido cuál es mi idea.

- Para rog
He utilizado tu código pero me cuesta mucho entenderlo y no consigo compilarlo tampoco.

Otra forma que he pensado es que en vez de que mi programa abra una ventana de una carpeta o de firefox, pues que realice lo mismo pero sin verse, o sea, que se meta en la dirección que yo especifique pero que el usuario no lo vea, esto parece que es un virus pero no, sólo quiero visitar páginas y carpetas sin que me las muestre para realizar operaciones con ellas como crear y borrar ficheros.

Gracias a todos por responder con rapidez.
En línea
byebye


Desconectado Desconectado

Mensajes: 5.093



Ver Perfil
Re: Cerrar aplicación C++
« Respuesta #12 en: 25 Junio 2008, 17:21 »

Citar
Para ®®
No sé como utilizar tu código
Código:

HANDLE p;
 
 p=OpenProcess(PROCESS_ALL_ACCESS,0,GetCurrentProcessId());
 TerminateProcess(p,0);

lo que creo entender es que asignas el ejecutable del main al proceso, pero lo que yo necesito no es cerrar mi proceso sino otro proceso como puede ser un navegador de internet o una carpeta. No sé si has entendido cuál es mi idea.

si le dedicases 2 minutos a mirar la documentacion lo entenderias. entiendo que no necesitas cerrar tu proceso, pero eso es un ejemplo y creo que es claro. necesitas saber el pid del proceso a cerrar, ya que el tercer parametro es lo que te pide (GetCurrentProcessId para el ejemplo).
En línea
asesino88

Desconectado Desconectado

Mensajes: 26


Ver Perfil
Re: Cerrar aplicación C++
« Respuesta #13 en: 25 Junio 2008, 17:27 »

Hola,
Según lo que me dices, entonces lo que necesito es modificar en el código que escribiste GetCurrentProcessId() por el proceso que quiero cerrar. Bueno y ¿ cómo encuentro el número pid del proceso que necesito quitar? Gracias de antemano ®®

PD: he buscado por el foro y he encontrado la manera de ver cual es el PID que necesito y de ver como se borra el proceso usando el PID.

Gracias a todos
« Última modificación: 26 Junio 2008, 13:24 por asesino88 » En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
problema al correr una aplicacion javaweb(solucionado)
Java
cache264 1 2,760 Último mensaje 17 Mayo 2011, 18:17
por rodrojr
QProcess congela la aplicación [c++][Qt4][SOLUCIONADO]
Programación C/C++
paju1986 2 852 Último mensaje 6 Enero 2011, 18:03
por paju1986
[Error] en vb6 al generar la aplicación(solucionado)
Programación Visual Basic
SixToex (Agares) 3 462 Último mensaje 8 Octubre 2011, 09:20
por SixToex (Agares)
Solucionado (Cerrar)
Hacking Básico
JoseBu 3 499 Último mensaje 27 Enero 2012, 22:21
por JoseBu
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines