RT.
我现在获得了一个窗口的句柄,例如是hWnd,现在删除该窗口(在桌面任务栏上面已打开的窗口)对应的进程。

解决方案 »

  1.   

    GetWindowThreadProcessId
    OpenProcess
    TerminateProcess
      

  2.   

    GetWindowThreadProcessId获取进程ID
    然后void OnTerminateProcess(unsigned long PID)
    {
    HANDLE hToken; //   handle   to   process   token   
    TOKEN_PRIVILEGES tkp; //   pointer   to   token   structure   
    BOOL result = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);   
    if(!result) //打开进程错误   
    return ;   
    result = LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid );   
    if(!result)            
    return  ;
    tkp.PrivilegeCount = 1;     
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;   
    result = AdjustTokenPrivileges(hToken,FALSE, &tkp,sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES)NULL, (PDWORD)NULL );   
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, PID);
    ::TerminateProcess(hProcess, 0);
    CloseHandle(hProcess);
    }
      

  3.   

    我现在知道了。。我是要通过窗口的句柄关闭窗口,而不是关闭窗口对应进程。这里的hWnd是我要关闭的窗口的句柄
    ::SendMessage(hWnd,WM_CLOSE,0,0); 我这样可以关闭桌面的窗口,但是文件夹窗口就是不可以关闭。
      

  4.   


    //关闭进程
    {
    DWORD PID; ::GetWindowThreadProcessId(hWnd, &PID); HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,false,PID); if (!hProcess)  ::MessageBox(NULL,_T("获取进程句柄操作失败!"),_T("错误!"),NULL); else
    {
    DWORD dwExitCode = 0;
    GetExitCodeProcess(hProcess,&dwExitCode);
    if (dwExitCode == STILL_ACTIVE)
    {
    while (TerminateProcess(hProcess,0) == 0)
    {}
    } WaitForSingleObject(hProcess,INFINITE);
    CloseHandle(hProcess); }
    }//关闭窗口{
    if(hWnd != NULL )
    {
    ::GetParent()
    ::DestroyWindow(hWnd);
    }}
      

  5.   

    我现在是关闭窗口,我用的是:PostMessage(NULL,WM_CLOSE,0,0),就可以关闭了。
      

  6.   

    得到主窗口句柄,然后发送WM_CLOSE消息就可以了