急救,在线等待,如何关闭一个应用程序啊?

解决方案 »

  1.   

    1.FindWindow(..)
    2.SendMessage(hwnd,WM_DESTROY,..)
      

  2.   

    sendmessage hwnd, WM_CLOSE, 0, 0orterminateprocess
    --------------------
    各位,我只知道那个程序执行文件的所在位置,该如何结束啊?需要枚举系统中的进程,然后GetModuleFileName来得到文件名称,判断是否运行,如果运行的画,用TerminateProcess来终止他。
      

  3.   

    判断另一个程序是否运行
    http://www.codeguru.com/system/PList.html
    single interface to enumerate processes//enum process to find a certain module
    void CPtbView::IsAppRun(CString modulename)
    {
        DWORD buf[4096];
        DWORD num;
        TCHAR filenamebuf[_MAX_PATH+1];
        HMODULE hModule;
        DWORD cbReturned;
        BOOL bret=EnumProcesses(buf,4095,&num);
        bool bfound=false;
        CString msg;
        
        if(!bret)
        {
            AfxMessageBox("Error EnumProcesses");
            return;
        }
        
        for(int i=0;i<(int)num;i++)
        {
            HANDLE hProcess =OpenProcess(PROCESS_QUERY_INFORMATION&brvbar; PROCESS_VM_READ,false,buf[i]);
            if(hProcess ==NULL)
                continue;
            bret=EnumProcessModules(hProcess ,&hModule, sizeof(hModule), &cbReturned );
            if(bret)
            {
                DWORD dwret=GetModuleFileNameEx(hProcess ,hModule,filenamebuf,_MAX_PATH);
                CloseHandle( hProcess  ) ;
                if(dwret==0)
                {
                    msg.Format("%d",GetLastError());
                    AfxMessageBox(msg);
                    break;
                }
                else
                {
                    TCHAR* pfind=_tcsstr(filenamebuf,modulename);
                    if(pfind)
                    {
                        bfound=true;
                        break;
                    }
                }
            }
        }
        if(bfound)
            AfxMessageBox("Found it");
        else
            AfxMessageBox("Not found");
    }void CPtbView::OnViewCheckrun()
    {
        IsAppRun("notepad.exe");
    }
      

  4.   

    你先运行一下这个执行文件,用Spy查看其主窗口特征,一般这些特征是不会变的,然后可以编程
    用1.FindWindow(..)
    2.SendMessage(hwnd,WM_DESTROY,..)
    将程序关闭. 不能根据执行文件的位置进行判断.
      

  5.   

    我想你一定知道那执行程序的主窗口的标题(Caption)吧,通过调用FindWindow函数,可以得到该窗口的指针,该函数可以通过窗体的类或标题的名称查找,这时你就可以对它进行操作了(当然包括关闭啦).
       
       找到窗口的指针, lpszClassName为窗口的类名,这时可以设为NULL, lpszWindowName 设为窗口的名称.
    CWnd* pw=(CWnd *)FindWindow(lpszClassName,lpszWindowName)
       关闭窗口
    pw->DestroyWindow();
        或:
    pw->PostMessage(WM_QUIT,0,0);
      

  6.   

    1.FindWindow(..)
    2.pw->DestroyWindow();
        或:
    pw->PostMessage(WM_QUIT,0,0);
      

  7.   

    用EnumProcesses要包含什么头文件吗?为什么编译通不过啊?