Estoy usando CreateProcess para crear un proceso cmd.exe al que se le pasa un parámetro que se ejecuta y se cierra, esto hace que el símbolo del sistema parpadee en la pantalla.
Traté de evitar esto configurando 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 pueda usar createprocess para iniciar un programa que está oculto a la vista?
Además, ¿cuál es la forma estándar adecuada de winapi para obtener variables de entorno?
Si es solo una aplicación de consola, también puede usar la CREATE_NO_WINDOW
bandera como parte de la CreateProcess
llamarse a sí mismo, por ejemplo
CreateProcess(NULL, lpszCommandLine, NULL, NULL, FALSE,
CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
Ver también esta página para obtener información sobre las variables de entorno.
el siguiente enlace aquí describe cómo crear la ventana en silencio:
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 en ese sentido.
configurar STARTF_USESHOWWINDOW en dwFlags
por diente afilado
Esto podría ser una exageración para sus necesidades, pero puede conectar la API ShowWindow y nunca mostrar ninguna ventana para ese proceso.
¿Ha configurado STARTF_USESHOWWINDOW en dwFlags?
– diente filoso
23 de abril de 2009 a las 6:15