通过ShellExecute等方式调用Dos程序,但是想隐藏其DOS窗口,不知道该怎么办?

解决方案 »

  1.   

    是用CreateProcess来实现,其中有个FLAG选项可以让你不用显示哪个窗口
      

  2.   

    如果这个dos窗口你不需要,那你可以使用管道执行
    { SECURITY_ATTRIBUTES sa;
    HANDLE hRead,hWrite;

    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
    sa.lpSecurityDescriptor = NULL;
    sa.bInheritHandle = TRUE;
    if (!CreatePipe(&hRead,&hWrite,&sa,0))
    {
    MessageBox("Error On CreatePipe()");
    return;

    STARTUPINFO si;
    PROCESS_INFORMATION pi; 
    si.cb = sizeof(STARTUPINFO);
    GetStartupInfo(&si); 
    si.hStdError = hWrite;
    si.hStdOutput = hWrite;
    si.wShowWindow = SW_HIDE;
    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
    if (!CreateProcess(NULL,"c:\\winnt\\system32\\cmd.exe /c dir"
            ,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
    {
    DWORD dw = GetLastError();
            MessageBox("Error on CreateProcess()");
            return;
    }
    CloseHandle(hWrite);

    char buffer[4096] = {0};
    DWORD bytesRead; 
    while (true)
    {
    if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)
    break;
    m_strResult+= buffer;
    UpdateData(false);
    Sleep(200); 

    }
      

  3.   

    ShellExecute(handle, "open", <fully_qualified_path_to_folder>, NULL, NULL, SW_HIDE);
      

  4.   

    用CreateProcess来实现
    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES