我用下面的代码来实现调用一个程序,并让他掩藏,可是程序一调出来就显示,根本没有掩藏,可又不知道那里错了,请大家帮忙CString str= "a.exe"; STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si, 0, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.dwFlags= STARTF_USESHOWWINDOW; 
si.wShowWindow =SW_HIDE; CreateProcess(NULL,str, NULL, NULL, NORMAL_PRIORITY_CLASS,0,NULL, NULL, &si, &pi);

解决方案 »

  1.   

    ZeroMemory(&si, sizeof(si));
    http://search.csdn.net/Expert/topic/2132/2132335.xml?temp=.3145258
      

  2.   

    不知道什么原因,WinExec("a.exe",SW_HIDE);我也试过,不过不灵,a.exe不是我写的,会不会跟他有关
      

  3.   

    或许和a.exe有关,这个程序中的hWnd = CreateWindow(..)后,使用了ShowWindows函数,这个函数的参数是不是直接使用了SW_SHOW,而不是使用WinMain函数传递进来的参数(最后一个)作为参数呢?
      

  4.   

    //对与exe是控制台窗口,可以用这种方法隐藏。
            char readBuf[5000];
            DWORD bytesRead=0;
            HANDLE hReadPipe,hWritePipe;
            PROCESS_INFORMATION pi;
            LPPROCESS_INFORMATION lppi;
            SECURITY_ATTRIBUTES lsa;        //安全属性
            STARTUPINFO myStartup;        lsa.nLength = sizeof(SECURITY_ATTRIBUTES);
            lsa.lpSecurityDescriptor = NULL;
            lsa.bInheritHandle = true;        lppi = π
            //创建管道
            if(CreatePipe(&hReadPipe,&hWritePipe,&lsa,0))
                    ShowMessage("Pipe Created OK .\n");
            else{
                    ShowMessage("Pipe Creation Error");
                    return;
            }        memset(&myStartup,0,sizeof(STARTUPINFO));
            myStartup.cb = sizeof(STARTUPINFO);
            myStartup.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
            myStartup.wShowWindow = SW_HIDE;
            myStartup.hStdOutput = hWritePipe;       if(!CreateProcess("d:\\test.exe",NULL,NULL,NULL,true,CREATE_NEW_CONSOLE,
                           NULL,NULL,&myStartup,&pi)){
                    ShowMessage("CreateProcess error:"+IntToStr(GetLastError()));
                    return;
    //也可以做个定时器查询该窗口并进行隐藏