terminateprocess关闭已打开的文件夹会时,会使桌面图标消息后1秒,再显示。怎么修改?这个缺点?
代码也下。我想关闭的是窗口,各种在桌面显示的窗口。用SendMessage(HWND,WM_CLOSE....),有些窗口并不接收。
所以想请问一下有什么办法吗?
HWND hWnd = ::GetDesktopWindow(); 
::InvalidateRect(hWnd, NULL, TRUE);
上面是更新桌面,但也并不能。
???????????????????有什么办法吗?各位高手老大!HWND hfold=::FindWindow(NULL,"11111");
DWORD id_num;
::GetWindowThreadProcessId(hfold,&id_num);
HANDLE hd = OpenProcess(/*PROCESS_ALL_ACCESS*/ PROCESS_QUERY_INFORMATION   |PROCESS_VM_READ|PROCESS_TERMINATE,FALSE, id_num);
TerminateProcess(hd, 0);
CloseHandle(hd);

解决方案 »

  1.   

    我感觉问题可能是使用TerminateProcess结束进程,使得进程没有机会清理内存,以至于需要操作系统代劳。
    解决的方法就是让进程正常的结束。那就只能使用WM_QUIT或WM_CLOSE等之类的消息了。
      

  2.   

    那你为什么不用ExitProcess?反正进程是你自己创建的。用WaitForSingleObject等待它安全关闭并返回
      

  3.   

    HWND hfold=::FindWindow(NULL,"文件夹");
    ::SendMessage(,WM_CLOSE,0,0);
    HWND hfold=::FindWindow(NULL,"文件夹");
    PostMessage(hfold,WM_QUIT,NULL,NULL);上面好像并不行。
      

  4.   

    关闭已打开的文件夹会时已打开的文件夹是 系统外壳进程 Explorer.exe 的一个窗体, 桌面也是属于这个进程, 结束后就会消失, 这很正常用 WM_SYSCOMMAND 消息关闭
    ::PostMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0);
      

  5.   

    ::SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0); 
      

  6.   

    HWND hfold=::FindWindow(NULL,"文件夹");
    ::PostMessage(hfold,WM_CLOSE,0,0); 
    可以了。谢谢各位。