我想用 TerminateProcess终止其他进程,代码如下:
    HWND  h=FindWindow(NULL, "我的程序"); 
    DWORD m_proId;
    m_proId=0;
    m_proId = GetWindowThreadProcessId(h,NULL);
    TerminateProcess(h,m_proId);
编译没有错误,可是终止不了“我的程序”,是什么问题呢?

解决方案 »

  1.   

    TerminateProcess的第一个参数进程句柄
    不是窗口句柄
      

  2.   

        HWND  h=FindWindow(NULL, "VSAT数据整理程序"); 
        DWORD m_proId;
        m_proId=0;
        m_proId = GetWindowThreadProcessId(h,NULL);
        HANDLE hProcess = OpenProcess( PROCESS_TERMINATE, FALSE, m_proId ); 
        TerminateProcess(hProcess,m_proId);
    这样吗?还是不行啊
      

  3.   

    TerminateProcess尽量少用这个东西,呵呵,资源释放会有问题的,尽量要让线程自己结束
      

  4.   

    你获得了窗口句柄 直接一个WM_CLOSE啊
      

  5.   

    HWND h=FindWindow(NULL, "VSAT数据整理程序");
    if(!h)
    {
     ::MessageBox(NULL, "FindWindow Fail", "", 0);
     return;
    }
    DWORD m_proId;m_proId=0;
       
    m_proId = GetWindowThreadProcessId(h,NULL);if(!m_proId)
    {
     ::MessageBox(NULL, "GetWindowThreadProcessId Fail", "", 0);
     return;
    }
    HANDLE hProcess = OpenProcess( PROCESS_TERMINATE, FALSE, m_proId );
    if(!hProcess)
    {
     ::MessageBox(NULL, "OpenProcess Fail", "", 0);
     return;
    }
    TerminateProcess(hProcess,0);2点建议
    1、DWORD m_proId;//变量最好不要这样定义,m_proId会让人误以为是成员变量的
    2、多调试,多用MessageBox、printf、OutputDebugStirng、GetLastError
      

  6.   

    你得到主窗口的HWND窗口句柄了,直接发送一个WM_CLOSE消息不行吗?
      

  7.   

    查看下,传送给TerminateProcess的进程句柄值是否有效.....
      

  8.   

    TerminateProcess是异步的,当你告诉系统你想终止进程,但在函数返回时,系统并不保证进程已经终止了。