我的程序执行了TerminateProcess这个函数后,关闭的是我的主窗口,而关闭的不是我新打开的窗口?
程序如下:
CString m_path;
PROCESS_INFORMATION infoProcess;
STARTUPINFO infoStart;
void CProcessDlg::OnButton2() 
{
ZeroMemory( &infoStart, sizeof(infoStart) );   
infoStart.cb=sizeof(infoStart);
infoStart.lpReserved=NULL;
infoStart.lpDesktop=NULL;
infoStart.lpTitle=NULL;
infoStart.cbReserved2=0;
infoStart.lpReserved2=NULL;
infoStart.dwFlags=STARTF_USEPOSITION;
infoStart.dwX=200;     
infoStart.dwY=200;
char str[100];
strncpy(str,(LPCTSTR)m_path,sizeof(str));   
BOOL flag=CreateProcess(NULL,str,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL, &infoStart,&infoProcess); 
} void CProcessDlg::OnButton3() 
{
// TODO: Add your control notification handler code here
LPDWORD lpDWord;
TerminateProcess(infoProcess.hProcess,GetExitCodeProcess(infoProcess.hProcess,lpDWord));
}
infoProcess.hProcess不应该是新的进程的句柄吗?

解决方案 »

  1.   

    低级错误
    LPDWORD lpDWord;
    是返回值,没申请内存,这样就可以了
       DWORD DWord;
    TerminateProcess(infoProcess.hProcess,GetExitCodeProcess(infoProcess.hProcess,&DWord));
      

  2.   

    向新开的窗口发送WM_CLOSE消息
      

  3.   

    用TerminateProcess这个函数关闭到底怎嘛用阿??
      

  4.   

    看看 这个 infoProcess.hProcess 对不对??还有 用 GetLastError看看
      

  5.   

    请楼主用下面的代码测试一下:if ( !TerminateProcess( infoProcess.hProcess, 0 ) )
    {
        CString str;
        str.format( _T("Terminate Failed!\nError code: %d\n")
            _T("Process Handle: %#0x"), GetLastError(), infoProcess.hProcess );
        MessageBox(NULL, str, _T("Error"), 0 );
    }
      

  6.   

    要给分给这个ID
    请楼主用下面的代码测试一下:if ( !TerminateProcess( infoProcess.hProcess, 0 ) )
    {
        CString str;
        str.format( _T("Terminate Failed!\nError code: %d\n")
            _T("Process Handle: %#0x"), GetLastError(), infoProcess.hProcess );
        MessageBox(NULL, str, _T("Error"), 0 );
    }
      

  7.   

    我的在VC6.0+win2k 下试过,没问题,不知楼主的环境是什么