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

时间:2009-10-20 21:01:36

标签: c windows cmd system

我正在编写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;
    }

是否存在其他功能,或者没有显示控制台的修改?

谢谢!最好的问候。

4 个答案:

答案 0 :(得分:15)

您可以使用WinExec("your cmd command", SW_HIDE);代替system("cmd command")

答案 1 :(得分:12)

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

答案 2 :(得分:3)

正如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()来复制它。

答案 3 :(得分:1)

注意:我的答案不一定适合您的具体问题,但此Q&amp; A是没有命令提示的&#34; Windows系统的最高Google result&#34;和其他类似的查询。

这是一种在没有新cmd.exe窗口的情况下执行命令的方法。基于Roland Rabien's answerMSDN,我已经写了一个工作函数。

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()一样打电话。