likes - winapi: ¿CreateProcess pero oculta la ventana del proceso?
hashtags para instagram likes (4)
Estoy usando CreateProcess para crear un proceso cmd.exe que se pasa un parámetro que se ejecuta y se cierra, esto hace que el símbolo del sistema aparezca en la pantalla.
Intenté evitar esto estableciendo STARTUPINFO struct wShowWindow en SW_HIDE pero este parámetro parece afectar la ventana de llamada, no la ventana del proceso que se ejecuta.
¿Hay alguna forma de que puedas usar createprocess para lanzar un programa que está oculto a la vista?
Además, ¿cuál es la forma estándar correcta de winapi para obtener variables de entorno?
El siguiente enlace here describe cómo crear la ventana de forma silenciosa:
DWORD RunSilent(char* strFunct, char* strstrParams)
{
STARTUPINFO StartupInfo;
PROCESS_INFORMATION ProcessInfo;
char Args[4096];
char *pEnvCMD = NULL;
char *pDefaultCMD = "CMD.EXE";
ULONG rc;
memset(&StartupInfo, 0, sizeof(StartupInfo));
StartupInfo.cb = sizeof(STARTUPINFO);
StartupInfo.dwFlags = STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow = SW_HIDE;
Args[0] = 0;
pEnvCMD = getenv("COMSPEC");
if(pEnvCMD){
strcpy(Args, pEnvCMD);
}
else{
strcpy(Args, pDefaultCMD);
}
// "/c" option - Do the command then terminate the command window
strcat(Args, " /c ");
//the application you would like to run from the command window
strcat(Args, strFunct);
strcat(Args, " ");
//the parameters passed to the application being run from the command window.
strcat(Args, strstrParams);
if (!CreateProcess( NULL, Args, NULL, NULL, FALSE,
CREATE_NEW_CONSOLE,
NULL,
NULL,
&StartupInfo,
&ProcessInfo))
{
return GetLastError();
}
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
if(!GetExitCodeProcess(ProcessInfo.hProcess, &rc))
rc = 0;
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
return rc;
}
Creo que getenv y setenv están bien? No estoy seguro de lo que está preguntando al respecto.
Esto puede ser un exceso para sus necesidades, pero puede conectar la API de ShowWindow y nunca mostrar ninguna ventana para ese proceso.
establecer STARTF_USESHOWWINDOW en dwFlags
por sharptooth
Si solo es una aplicación de consola, también puede usar el indicador CREATE_NO_WINDOW
como parte de la llamada a CreateProcess
, por ejemplo
CreateProcess(NULL, lpszCommandLine, NULL, NULL, FALSE,
CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
Además, consulte esta página para obtener información sobre las variables de entorno.