在C系统()函数中隐藏控制台,Win

我在Dev-C ++中编写一个C程序,我需要使用一些Windows(CMD)命令。 这很容易,但是当执行system()函数中的命令时,程序会在执行过程中运行控制台。

一个例子:

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

是否存在其他function,或修改不显示控制台?

谢谢! 最好的祝福。

你可以用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); } 

你可以使用WinExec("your cmd command", SW_HIDE); 而不是system("cmd command")

如FigBug所说,CreateProcess()是要走的路,但我不认为CreateProcess()可以执行shell if语句。 你可能需要像这样把它传递给一个命令:

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

但更好的解决方案可能是使用CreateFile()来测试文件是否存在,使用CopyFile()来复制它。

注意:我的答案不一定适合您的具体问题,但这个问答是谷歌 “没有命令提示符的Windows系统”和其他类似的查询的结果。

这里有一个方法来执行没有新的cmd.exe窗口的命令。 基于Roland Rabien的回答和MSDN ,我写了一个工作函数。

 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); } } 

适用于所有Windows平台。 打电话就像你会system()