在空调系统隐藏控制台()函数,赢(Hide console in C system()

2019-08-22 07:41发布

我编码开发-C ++ C程序,我需要使用几个窗口(CMD)的命令。 这是很容易的,但在执行在系统中()函数的命令时,程序运行在执行控制台。

一个例子:

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

存在的其他功能,或者不显示在控制台的修改?

谢谢! 最好的祝福。

Answer 1:

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



Answer 2:

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


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



Answer 4:

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

这里有没有新的执行命令的方式cmd.exe窗口。 基于罗兰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()



文章来源: Hide console in C system() function, Win