隐藏使用system()命令显示的命令窗口。
问题描述:
我已经在C++ \ CLI应用程序中创建了一个用户界面,它使用C DLL来处理exif文件。这个C DLL使用system()函数打开cmd窗口和一个记事本文件进行编辑,当我们关闭记事本文件时,输入的数据被编辑为exif头文件注释。现在我必须隐藏这个cmd窗口,我已经使用了“start \ b”,但是这样会关闭cmd窗口,这会导致编辑exif头文件而不将数据输入到记事本文件中。 这个函数的代码如下。隐藏使用system()命令显示的命令窗口。
FILE * file;
int a;
char QuotedPath[PATH_MAX+10];
file = fopen(TempFileName, "w");
if (file == NULL)
{
fprintf(stderr, "Can't create file '%s'\n",TempFileName);
ErrFatal("could not create temporary file");
}
fwrite(Comment, CommentSize, 1, file);
fclose(file);
fflush(stdout); // So logs are contiguous.
{
char * Editor;
Editor = getenv("EDITOR");
if (Editor == NULL)
{
#ifdef _WIN32
Editor = "notepad";
#else
Editor = "vi";
#endif
}
if (strlen(Editor) > PATH_MAX) ErrFatal("env too long");
sprintf(QuotedPath, "%s \"%s\"",Editor, TempFileName);
a = system(QuotedPath);
}
if (a != 0)
{
char message[50]= "";
strcpy(message, "Editor failed to launch");
MessageBoxA(hWnd,message,"Error : ",MB_ICONWARNING);
// perror("Editor failed to launch");
exit(-1);
}
if (hFileOpen != NULL)
{
file = fopen(TempFileName, "r");
if (file == NULL)
{
ErrFatal("could not open temp file for read");
}
// Read the file back in.
CommentSize = fread(Comment, 1, 999, file);
fclose(file);
unlink(TempFileName);
return CommentSize;
}
答
的最佳方式(愚见)是使用的ShellExecuteEx运行指定的EXE,这将返回的句柄的执行过程中,当完成了它你就可以监控和关闭。
注:我想你应该考虑重新格式化你的代码块
请你可以整理你的代码,以便它正确的格式。 – Tom 2010-02-22 14:21:25