Visual C++ .NET - LLamar programa desde visual c++

 
Vista:

LLamar programa desde visual c++

Publicado por kike (1 intervención) el 25/01/2013 17:35:15
buen dia tengo un pequeño programa en visual c++ que muy dificilmente pude crearlo ya que estoy resien empesando con este lenguaje pues yo originalmente programo en BAsic, bueno lo que quiero es que mi programa habra una pequeña aplicaion que es un .bat y un .cmd.

es decir inserto un comand bootom y al hacerleclick en ese boton me jale dichas aplicasiones pero no logro hacerlo ya intente de varias maneras y es poca la ayuda que encuentro en las webs.
intente esto:

private: System::Void cmd1_Click(System::Object^ sender, System::EventArgs^ e) {

ShellExecute(NULL, "open", "C:\comandos.cmd", NULL, NULL, SW_SHOWNORMAL);

que lo puse dentro del evento click del boton pero me da el siguiente error:

1>c:\users\sertec\documents\visual studio 2010\projects\zinmplificador\zinmplificador\Form1.h(129): error C2664: 'ShellExecuteW' : no se puede convertir el parámetro 2 de 'const char [5]' a 'LPCWSTR'
1> Los tipos señalados no están relacionados; la conversión requiere reinterpret_cast, conversión de estilo de C o conversión de estilo de función
1>
1>ERROR al compilar.
1>
1>Tiempo transcurrido 00:00:03.47
========== Generar: 0 correctos, 1 incorrectos, 0 actualizados, 0 omitidos ==========

espero la ayuda de ustedes los expertos.

gracias por su tiempo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Ejecución de archivos .bat y .cmd desde un botón

Publicado por Alejandro (265 intervenciones) el 13/02/2024 17:50:33
Hola Kike.

El error que estás viendo se debe a la diferencia en el tipo de cadena entre `ShellExecute` y la cadena que estás pasando. `ShellExecute` espera una cadena de caracteres amplios (`LPCWSTR`), y estás proporcionando una cadena de caracteres estrechos (`const char[]`).

Aquí hay una solución posible utilizando la macro `TEXT()` para convertir la cadena literal a la correcta para tu configuración de proyecto:

1
2
3
4
5
6
7
#include <Windows.h>
 
// ...
 
private: System::Void cmd1_Click(System::Object^ sender, System::EventArgs^ e) {
    ShellExecute(NULL, L"open", TEXT("C:\\comandos.cmd"), NULL, NULL, SW_SHOWNORMAL);
}

Esto debería resolver el problema de la conversión de tipo de cadena.

Además, asegúrate de tener los encabezados y bibliotecas necesarios en tu archivo fuente. Puedes agregar la siguiente declaración al principio de tu archivo:

1
#include <Shellapi.h>

Espero que esto te ayude.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar