Tres funciones del SDK: WinExec, ShellExecute y CreateProcess pueden cumplir con los requisitos de llamar a otros programas. Entre ellas, WinExec es la más simple, ShellExecute es más flexible que WinExec y CreateProcess es la más compleja.
WinExec tiene dos parámetros, el primero especifica la ruta y el segundo especifica el modo de visualización.
ShellExecute puede especificar el directorio de trabajo y también puede encontrar asociaciones de archivos y abrirlas directamente sin cargar la aplicación asociada con el archivo. ShellExecute también puede abrir páginas web, iniciar las asociaciones de correo electrónico correspondientes, enviar correos electrónicos, etc.
CreateProcess tiene diez parámetros, pero la mayoría de ellos pueden ser reemplazados por NULL. Puede especificar los atributos de seguridad del proceso, información de herencia, prioridad de clase, etc. Si queremos obtener suficiente información sobre el nuevo proceso y controlar los atributos detallados del nuevo proceso, para lograr estos propósitos, necesitamos usar la función CreateProcess.
La sintaxis de las tres funciones del SDK (WinExec, ShellExec, CrateProcess):
WinExec
Esta función es la más simple, con solo dos parámetros, y la El prototipo es el siguiente:
UINT WinExec(
LPCSTR lpCmdLine, // ruta del comando
UINT uCmdShow // modo de visualización
) ;
El uso es el siguiente:
WinExec("Notepad.exe", SW_SHOW // Abrir el Bloc de notas
WinExec("D:\\); Archivos de programa\\Test\\ Test.exe",SW_SHOWMAXIMIZED); // Abra Test.exe en modo maximizado
Cabe señalar que si usa el modo SW_SHOWMAXMIZED para cargar un programa sin un botón de maximizar, como Neterm, Calc, etc., el formulario normal no aparecerá, pero se ha agregado a la lista de tareas.
ShellExecute
El prototipo es el siguiente:
HINSTANCE ShellExecute(
HWND hwnd, //identificador de la ventana principal
LPCTSTR lpOperation, //Operación, método abierto "editar", "explorar", "abrir", "buscar", "imprimir", "NULL"
LPCTSTR lpFile, //Nombre de archivo, se puede agregar delante de la ruta
LPCTSTR lpParameters, //Parámetros
LPCTSTR lpDirectory, //Carpeta predeterminada
INT nShowCmd //Modo de visualización
) ;
El uso es el siguiente:
ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL); //Abre el archivo C:\ Test.txt
ShellExecute(NULL, "open", "",/ NULL, NULL, SW_SHOWNORMAL // Abre la página web www.google.com
ShellExecute(NULL, "explorar", "D:\\C++",NULL,NULL,SW_SHOWNORMAL // Abrir directorio D:\C++
ShellExecute(NULL,"print", "C:\\Test.txt ",NULL,NULL, SW_HIDE); //Imprimir archivo C:\Test.txt
ShellExecute no admite salida dirigida.
CreateProcess
El prototipo es el siguiente:
BOOL CreateProcess(
LPCTSTR lpApplicationName, //nombre del programa de ejecución
LPTSTR lpCommandLine, //Línea de parámetros
//Los dos parámetros siguientes describen los atributos de seguridad del proceso y subproceso creados. Si es NULL, se utilizan los atributos de seguridad predeterminados
. LPSECURITY_ATTRIBUTES lpProcessAttributes, // atributos de seguridad del proceso
LPSECURITY_ATTRIBUTES lpThreadAttributes, // atributos de seguridad del hilo
BOOL bInheritHandles, // indicadores de herencia
DWORD dwCreationFlags, // creación flags
LPVOID lpEnvironment, // Variables de entorno
LPCTSTR lpCurrentDirectory, // El directorio inicial donde se ejecuta el proceso
LPSTARTUPINFO lpStartupInfo, // Se utiliza al crear un proceso hijo Establecer varias propiedades
LPPROCESS_INFORMATION lpProcessInformation //Se utiliza para recibir información relevante después de crear el proceso
);
Uso de la siguiente manera:
PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&si,0,sizeof(si));
si.cb=sizeof(si );
si.wShowWindow=SW_SHOW;
si.dwFlags=STARTF_USESHOWWINDOW;
bool fRet=CreateProcess("D:\\putty.exe", NULL,NULL ,FALSE,NULL,NULL,NULL,NULL,&si,&pi);
Se puede ver que a través de los diferentes métodos anteriores, se puede lograr el propósito de abrir otras aplicaciones en la aplicación. Algunos de estos métodos pueden ser un poco más problemáticos, por lo que debemos elegir el método más adecuado según los diferentes propósitos para lograr nuestros objetivos.
Otras notas sobre las tres funciones del SDK: WinExec, ShellExecute y CreateProcess:
1. Definir el archivo de encabezado
Debe estar en el archivo de encabezado stdafx. h Defina los siguientes dos archivos de encabezado:
#include
#include
Si el archivo de encabezado #include
Además de
2. Defina la ruta
La ruta representada en C++ debe usar "\\" en lugar del habitual "\", por lo que las rutas representadas por las tres funciones anteriores son:
Disco:\\Directorio\\...\\Nombre de archivo
WinExec("D:\\Archivos de programa\\Test\\Test.exe",SW_SHOWMAXIMIZED);
ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL);
bool fRet=CreateProcess("D:\\putty. exe",NULL,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);
////////////////////// ///////////////////////////////////////////
WinAPI: WinExec - Ejecutar programa externo
//Statement
WinExec(
lpCmdLine: LPCSTR; {nombre de archivo y parámetros; si no se especifica la ruta, la búsqueda se realizará en el siguiente orden: Directorio de programas/Directorio actual/System32/Windows/PATH Variable de entorno}
uCmdShow: UINT {Opciones de inicio}
): UINT; p>
//Valor de retorno:
Mayor que 31 {Llamada exitosa}
Igual a 0 {Memoria insuficiente}
ERROR_FILE_NOT_FOUND = 2; Error en el nombre del archivo}
ERROR_PATH_NOT_FOUND = 3; {nombre de ruta incorrecto}
ERROR_BAD_FORMAT = 11; {archivo EXE no válido}
//uCmdShow valores opcionales del parámetro :
SW_HIDE = 0; {oculto y no hay ningún icono minimizado en la barra de tareas}
SW_SHOWNORMAL = 1 {se muestra en el tamaño y posición más cercanos, activado}
SW_NORMAL = 1; {igual que SW_SHOWNORMAL }
SW_SHOWMINIMIZED = 2; {minimizar, activar}
SW_SHOWMAXIMIZED = 3; {maximizar, activar}
SW_MAXIMIZE = 3; {Igual que SW_SHOWMAXIMIZED}
SW_SHOWNOACTIVATE = 4; {Mostrar con el tamaño y la posición más cercanos, inactivo}
SW_SHOW = 5; p>
SW_MINIMIZE = 6; { Minimizar, inactivar}
SW_SHOWMINNOACTIVE = 7; {Igual que SW_MINIMIZE}
SW_SHOWNA = 8;
SW_RESTORE = 9; {Igual que SW_SHOWNORMAL }
SW_SHOWDEFAULT = 10; {Igual que SW_SHOWNORMAL}
SW_MAX = 10;
MUESTRA NORMAL}
----------------------------------------- -------- ---------------------------------------
//Ejemplo, Iniciar el Bloc de notas:
procedimiento TForm1.Button1Click(Sender: TObject);
comenzar
WinExec('notepad.exe' , SW_SHOWNORMAL);
fin;