Ocultar consola en la función C system (), Win

Estoy codificando un progtwig C en Dev-C ++, y necesito usar un par de comandos de Windows (CMD). Es fácil, pero cuando se ejecuta el comando en la función del sistema (), el progtwig ejecuta la consola en la ejecución.

Un ejemplo:

#include  #include  #include  int main() { system("if not exist c:\my_docs\doc.txt (xcopy /Y doc.txt c:\my_docs\)"); // Cmd command system("pause"); return 0; } 

¿Existe otra función o una modificación que no muestra la consola?

¡Gracias! Atentamente.

Puede usar WinExec("your cmd command", SW_HIDE); en lugar de system("cmd command") .

Puedes hacerlo con CreateProcess.

 STARTUPINFOW si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); if (CreateProcessW(command, arg, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) { WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } 

Como dijo FigBug, CreateProcess () es el camino a seguir, pero no creo que CreateProcess () pueda ejecutar una sentencia shell if. Es posible que deba pasar algo así como un comando:

 "cmd.exe /c \"if not exist c:\my_docs\doc.txt (xcopy /Y doc.txt c:\my_docs\)\"" 

Pero una mejor solución podría ser usar CreateFile () para probar si existe un archivo y CopyFile () para copiarlo.

NOTA: Mi respuesta no está necesariamente adaptada a su pregunta específica, pero esta Q & A es el resultado principal de Google para “Sistema Windows sin símbolo del sistema” y otras consultas similares.

Esta es una forma de ejecutar comandos sin una nueva ventana cmd.exe . Basado en la respuesta de Roland Rabien y en MSDN , escribí una función de trabajo.

 int windows_system(const char *cmd) { PROCESS_INFORMATION p_info; STARTUPINFO s_info; LPSTR cmdline, programpath; memset(&s_info, 0, sizeof(s_info)); memset(&p_info, 0, sizeof(p_info)); s_info.cb = sizeof(s_info); cmdline = _tcsdup(TEXT(cmd)); programpath = _tcsdup(TEXT(cmd)); if (CreateProcess(programpath, cmdline, NULL, NULL, 0, 0, NULL, NULL, &s_info, &p_info)) { WaitForSingleObject(p_info.hProcess, INFINITE); CloseHandle(p_info.hProcess); CloseHandle(p_info.hThread); } } 

Funciona en todas las plataformas de Windows. Llamar como lo haría con el system() .