我在这里遇到了严重的问题。我需要通过C ++执行CMD命令行,而不显示控制台窗口。因此我无法使用system(cmd)
,因为窗口会显示。
我尝试了winExec(cmd, SW_HIDE)
,但这也不起作用。 CreateProcess
是我尝试的另一个。但是,这适用于运行程序或批处理文件。
我最终尝试ShellExecute
:
ShellExecute( NULL, "open",
"cmd.exe",
"ipconfig > myfile.txt",
"c:\projects\b",
SW_SHOWNORMAL
);
任何人都可以看到上述代码有什么问题吗?我使用SW_SHOWNORMAL
直到我知道这有用。
我真的需要一些帮助。没有任何事情发生,我已经尝试了很长一段时间。任何人都可以给出任何建议都很棒:)
答案 0 :(得分:8)
将输出重定向到您自己的管道是一个更整洁的解决方案,因为它避免了创建输出文件,但这很好用:
ShellExecute(0, "open", "cmd.exe", "/C ipconfig > out.txt", 0, SW_HIDE);
您没有看到cmd窗口,输出会按预期重定向。
您的代码可能失败(除了/C
之外),因为您将路径指定为"c:\projects\b"
而不是"c:\\projects\\b"
。
答案 1 :(得分:5)
这是我的DosExec函数实现,允许(静默)执行任何DOS命令并将生成的输出检索为unicode字符串。
req
答案 2 :(得分:4)
您应该使用cmd.exe
上的CreateProcess和/C
参数来隧道传输ipconfig命令。 >在命令行上本身不起作用。你必须redirect programmatically the stdout。
答案 3 :(得分:1)
我在github上有一个类似的程序[windows7和10测试]
https://github.com/vlsireddy/remwin/tree/master/remwin
这是服务器程序
这不会显示"控制台窗口" 无需人员在cmd.exe上手动执行命令 remwin.exe可以在后台运行,也可以是瘦服务器程序
答案 4 :(得分:0)
要添加到@CédricFrançoys的答案中,我修复了他在Windows构建中的代码中的一些问题:
缺少函数定义:
要编译代码,请添加以下函数定义:
#define UNICODEtoANSI(str) WCHARtoCHAR(str, CP_OEMCP)
LPSTR WCHARtoCHAR(LPWSTR wstr, UINT codePage) {
int len = (int)wcslen(wstr) + 1;
int size_needed = WideCharToMultiByte(codePage, 0, wstr, len, NULL, 0, NULL, NULL);
LPSTR str = (LPSTR)LocalAlloc(LPTR, sizeof(CHAR) * size_needed);
WideCharToMultiByte(codePage, 0, wstr, len, str, size_needed, NULL, NULL);
return str;
}
不安全的CRT字符串函数调用:
要编译代码,请用以下调用替换strcpy
和strcat
strcpy_s(output, sizeof(output), "");
strcat_s(output, RESULT_SIZE, buffer);
删除冗余的空终止:
删除do-while循环:
buffer[bytesRead] = '\0';
因为strcat_s
会解决这个问题。
答案 5 :(得分:0)
您可以使用
console.log
希望这对您有用