2010-02-22 182 views
0

我已经在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; 
} 
+0

请你可以整理你的代码,以便它正确的格式。 – Tom 2010-02-22 14:21:25

回答

1

的最佳方式(愚见)是使用的ShellExecuteEx运行指定的EXE,这将返回的句柄的执行过程中,当完成了它你就可以监控和关闭。

注:我想你应该考虑重新格式化你的代码块