Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Borito30 en 15 Febrero 2017, 16:14 pm



Título: programa que se cierra a si mismo ayuda
Publicado por: Borito30 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:
(https://i.imgsafe.org/474c2ee3a4.png)
en caso de poner un lpcstr:
(https://i.imgsafe.org/474c9f1bd6.png)
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


Título: Re: programa que se cierra a si mismo ayuda
Publicado por: ivancea96 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().


Título: Re: programa que se cierra a si mismo ayuda
Publicado por: Borito30 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!