elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  programa que se cierra a si mismo ayuda
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: programa que se cierra a si mismo ayuda  (Leído 845 veces)
Borito30


Desconectado Desconectado

Mensajes: 481


Ver Perfil
programa que se cierra a si mismo ayuda
« en: 15 Febrero 2017, 16:14 pm »

Hola estoy haciendo un pequeño programa que se cierra a si mismo pero el problema es que cuando se ejecuto no se cierra probe con conversiones para hacer una string y incluir el pid pero luego shellexecute no presiona mi comando cuando abro la cmd entonces os queria preguntar si conoceis alguna manera. El código(sería un intento ) en este caso no me deja ni sumar el string ni sumarlos como LPCSTR y si lo pongo como una string y lo añado directamente no se ejecuta mi comando.. por ejemplo:
Código:
#include <windows.h>
#include <iostream>
int main(){
int i = getpid();
string cadena = std::to_string(i);
LPCSTR lpc = cadena.c_str();
cout << "taskkill /f /im " << i;
ShellExecuteA(NULL,"open","C:\\Users\\myUser\\Desktop\\cmd.exe","/c taskkill /f /im "+cadena,0,SW_SHOW);}
Por ejemplo cambiando lpc o por string no se compila me da el siguiente en caso de poner una string:

en caso de poner un lpcstr:

El problema esque cuando intento incluirle el pid sin ponerlo como dentro de la string no lo hace también probe con conversiones pero no funciono.
Obviamente i no puede añadirse a un LPCSTR pero esque aunque la suma no me deja


« Última modificación: 15 Febrero 2017, 16:34 pm por Ragaza » En línea

Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)
ivancea96


Desconectado Desconectado

Mensajes: 3.410


ASMático


Ver Perfil WWW
Re: programa que se cierra a si mismo ayuda
« Respuesta #1 en: 15 Febrero 2017, 16:33 pm »

Código
  1. "/c taskkill /f /im "+i
"" es un const char*. i es un int. En otros lenguajes sí, pero en C++ no puedes sumarlo con el resultado que esperas. Tendrás que convertir la i a string, por ejemplo:

Código
  1. "/c taskkill /f /im "+to_string(i)


Eso generará otro problema, y es que const char* + string = string, pero ShellExecuteA espera un const char*. Para convertir de string a const char*, existe el método de string c_str():

Código
  1. ( "/c taskkill /f /im "+to_string(i) ).c_str()

Con eso debería estar. (No me fijé en si hay otros problemas)


Mientras escribía veo que ya pusiste el to_string. Falta pues, el c_str().


En línea

Borito30


Desconectado Desconectado

Mensajes: 481


Ver Perfil
Re: programa que se cierra a si mismo ayuda
« Respuesta #2 en: 15 Febrero 2017, 16:50 pm »

Código
  1. "/c taskkill /f /im "+i
"" es un const char*. i es un int. En otros lenguajes sí, pero en C++ no puedes sumarlo con el resultado que esperas. Tendrás que convertir la i a string, por ejemplo:

Código
  1. "/c taskkill /f /im "+to_string(i)


Eso generará otro problema, y es que const char* + string = string, pero ShellExecuteA espera un const char*. Para convertir de string a const char*, existe el método de string c_str():

Código
  1. ( "/c taskkill /f /im "+to_string(i) ).c_str()

Con eso debería estar. (No me fijé en si hay otros problemas)


Mientras escribía veo que ya pusiste el to_string. Falta pues, el c_str().
si tienes razon me había hecho un lío es correcto como señalastes funciona bien!
En línea

Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines