ShellExecute打印一个excel文档后会打开这个文档,我想通过进程来关闭这个文件.
用GetCurrentProcessId 获取的只是当前运行的程序的 ProcessId并不是excel的ProcessId.
请问要怎样得到这个excel的句柄

解决方案 »

  1.   

    不要使用ShellExecute,改用ShellExecuteEx,参数结构体里面有个hProcess成员能记录Excel进程的句柄,需要关闭Excel进程时使用TerminateProcess,不过这种方式不太好,最好枚举所有顶级窗口,通过窗口所属的进程句柄来找到Excel主窗口,然后向窗口发送WM_CLOSE消息。
      

  2.   

    ShellExecuteEx不能进行打印操作的吧?
      

  3.   

    ShellExecute能做的事情ShellExecuteEx全部都能做,看看MSDN的解释吧
      

  4.   

    SHELLEXECUTEINFO ExecInfo;
              ExecInfo.cbSize = sizeof(SHELLEXECUTEINFO) ; 
              ExecInfo.fMask  = SEE_MASK_FLAG_NO_UI | SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_DDEWAIT | SEE_MASK_CONNECTNETDRV ;
              ExecInfo.nShow  = SW_HIDE;
              ExecInfo.hwnd   = NULL ; 
              ExecInfo.lpVerb = "open"; 
              ExecInfo.lpFile = "D:\WSC.xls";
              ExecInfo.lpParameters = NULL; 
              ExecInfo.lpDirectory = NULL;
      ExecInfo.hProcess = NULL;
            
      :: ShellExecuteEx(&ExecInfo);   if(ExecInfo.hProcess)
      {
                    TerminateProcess(ExecInfo.hProcess,1);      
      }为什么打开不了?
      

  5.   

    SHELLEXECUTEINFO ExecInfo;
              ExecInfo.cbSize = sizeof(SHELLEXECUTEINFO) ; 
              ExecInfo.fMask  = SEE_MASK_FLAG_NO_UI | SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_DDEWAIT | SEE_MASK_CONNECTNETDRV ;
              ExecInfo.nShow  = SW_HIDE;
              ExecInfo.hwnd   = NULL ; 
              ExecInfo.lpVerb = "open"; 
              ExecInfo.lpFile = ;  
              ExecInfo.lpParameters = NULL; 
              ExecInfo.lpDirectory = "";     
              ShellExecuteEx(&ExecInfo);  
             if(ExecInfo.hProcess   !=   NULL)   
     {   
               TerminateProcess(ExecInfo.hProcess,1);   
               ExecInfo.hProcess   =   NULL;   
     }  各位帮看看这段代码有什么问题?可以打开文件但是结束不了进程,应该是句柄的问题. 
      

  6.   

    看看hProcess的值是不是NULL,另外判断TerminateProcess的返回值,如果返回失败用GetLastError取一下错误码来分析原因。
      

  7.   

    hProcess确实为NULL,设置好象都没有错,不知道为什么会这样?
      

  8.   

    该成nShow = SW_SHOW试试,如果不行再改fMask来试。
      

  9.   

    还是一样的
    fMask应该只能是那个吧..
    其他的MSDN里都说是NULL啊
      

  10.   

     ShellExecuteEx是不是只能取得应用程序的句柄?
     文件就不行?
      

  11.   

    有可能是这样。
    不然你再换种方法,用GetForegroundWindow或者FindWindow找出窗口句柄,再GetWindowThreadProcessId获得进程句柄。
      

  12.   

    文档窗口名你的最后是你打开的文件名。
    或者你在所有进程中找EXCEL.EXE。