Buscando el uso detallado de createprocess, pipe, winexec y shellexecute en Delphi

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 // Puede ser reemplazado por windows.h

#include

Si el archivo de encabezado #include está definido, no es necesario definir #inc.

Además de , "windows.h" no solo contiene "shellapi.h", sino que también define muchos tipos de datos. Sin estos tipos de datos, el propio shellapi.h provocará un error.

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;

//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;