programa que se cierra a si mismo ayuda

Iniciado por Borito30, 15 Febrero 2017, 16:14 PM

0 Miembros y 1 Visitante están viendo este tema.

Borito30

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:
#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
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)

ivancea96

Código (cpp) [Seleccionar]
"/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 (cpp) [Seleccionar]
"/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 (cpp) [Seleccionar]
( "/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().

Borito30

Cita de: ivancea96 en 15 Febrero 2017, 16:33 PM
Código (cpp) [Seleccionar]
"/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 (cpp) [Seleccionar]
"/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 (cpp) [Seleccionar]
( "/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!
Estoy en contra del foro libre y la Sección de juegos y consolas (distraen al personal)