C# 依据进程id,获取该进程的所有窗体句柄

C# 根据进程id,获取该进程的所有窗体句柄
用Progcess调用了外部程序
Process.Handle 有值
Process.MainWindowHandle为0

Process.HandleCount为7,我想获取这7个Handle,如何获取?
另外一个小问题:为嘛Process.MainWindowHandle为0可以理解(可能没有获取到焦点),而Process.Handle却有值,如何获取MainWindowHandle。

------解决思路----------------------
msdn:
仅当进程有图形界面时,该进程才具有与其关联的主窗口。 如果关联进程没有主窗口,则 MainWindowHandle 值为零。 对于已隐藏的进程,也就是任务栏里不可见的进程,该值也为零。 这可以是任务栏最右端通知区域中显示为图标的进程的事例。
------解决思路----------------------
MianWindowHandle 为0,需要调refresh下就有了.
要取得其它窗口句柄, 得用win 32 API, GetWindow ,取得所有窗口的句柄,再用API:GetWindowThreadProcessld,取得窗口的进程ID.
Process.MainWindowHandle也是用这两个API进行处理的,你可以反编看看. 
这两API,怎么用,百度一下就会有一大堆了.