2010-02-22 177 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,這將返回的句柄的執行過程中,當完成了它你就可以監控和關閉。

注:我想你應該考慮重新格式化你的代碼塊