如何根据<进程名>获得<进程主窗口句柄>并进行处理?具体描述:
------------------------------------------
进程里有多个相同的进程名(如:12345678.exe),且每个进程都有对应的窗口,而且标题相同.
但这些进程的窗口会随机被隐藏(只是窗口隐藏了,进程还在)
现需要一段代码,功能如下:查找出所有进程名为"12345678.exe"的主窗口句柄,然后用IsWindowVisible判断窗口是否为隐藏,
如为隐藏,则终止进程.
注意:(一定要循环遍历,也就是终止所有进程名为"12345678.exe"且主窗口是隐藏状态的进程) 期待高手解答....

解决方案 »

  1.   

    不想写代码......不过可以给你提供思路,自己动动手吧:一,先取得进程列表,以及对应的PID列表.
        这一步我有现成的函数封装好的:    http://www.m5home.com/bbs/dispbbs.asp?boardid=28&Id=745&page=2    调用ListProcess即可取得这两者,再把指定进程名以外的过滤掉.二,使用enumwindow函数,在其回调函数里使用GetWindowThreadProcessId来对所有枚举出的窗体的PID进行比较,挑出目标.    条件就是上一步得到的那些PID列表.三,使用你说的IsWindowVisible定期检测这些已确认的窗口.    如果需要结束进程,调用第一步里面的模块里的CloseProcess并指定PID即可....说起来,好象代码也没几行的.....你折腾一下吧......
      

  2.   

    不好意思,可能问题的描述有些错误.补充下,最终需要实现的功能是:循环判断指定进程名是否存在主窗口.如果不存在,则终止这些进程.
    请高手给段代码.......(也就是有些程序启动的时候能一切正常的显示它的窗口,在某种情况下程序意外关闭了,但进程里还存在,这时候如果用IsWindowVisible判断窗口的方法可能不好使)
      

  3.   

    不判断状态直接ShowWindow ,xxx, SW_SHOW 'xxx为句柄
      

  4.   

    在进程中是不存在主窗口这种说法的,只能使用EnumThreadWindows枚举窗口,至于枚举进程,我博客里有现成代码,在此不贴了。