为了避免与互操作服务纠缠在一起(超出我的理解)我使用
spawnl(P_DETACH, MyPath, "MyProg.exe", 0);
生成VS非托管C ++命令行项目。 (它通过制造商的DLL控制天文相机。)
我不需要也不想要一个窗口(我使用主GUI程序中的命名管道与myprog.exe交谈)。
从GUI中删除窗口是微不足道的,但是为了避免与编组问题纠缠在一起(超出我的理解范围),myprog.exe必须是非托管本机C ++命令行项目,而不是CLI项目。
有关于从批处理文件或python中抑制窗口的大量文献,关闭Windows项目中的窗口是微不足道的,但这在这里都无关紧要。
我生成myprog.exe分离,但这是无关紧要的。关闭控制台句柄执行正常但不关闭窗口。
有关如何永不打开黑色屏幕DOS框,或者如何在不关闭myprog.exe的情况下关闭它的任何想法?
答案 0 :(得分:1)
尝试这样的事情:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
void system_error(char *name) {
// Retrieve, format, and print out a message from the last errror.
// The `name' that's passed should be in the form of a present tense
// noun (phrase) such as "opening file".
//
char *ptr = NULL;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
0, GetLastError(), 0, (char *)&ptr, 1024, NULL);
printf("\nError %s: %s\n", name, ptr);
LocalFree(ptr);
}
PROCESS_INFORMATION p;
BOOL WINAPI die(DWORD reason) {
TerminateProcess(p.hProcess, 1);
return TRUE;
}
int main(int argc, char **argv) {
STARTUPINFO s;
memset(&s, 0, sizeof s);
s.cb = sizeof(s);
if (!CreateProcess(argv[1], argv[2], NULL, NULL, TRUE,
DETACHED_PROCESS, NULL, NULL, &s, &p))
{
system_error("Spawning program");
return 1;
}
SetConsoleCtrlHandler(die, TRUE);
WaitForSingleObject(p.hProcess, INFINITE);
return 0;
}