您的位置:首页 > 编程语言 > C#

C#遍历进程获取主窗口句柄

2012-02-17 20:47 543 查看
当我们启动一个程序,用 Process process = Process.Start(path);//path是程序的绝对路径

启动时,获取的process.Handle其实是进程的句柄,并不是窗口的句柄,而有时process.MainWindowHandle却等于0

此时就需要用枚举来获取启动进程的主窗口句柄了,代码如下

?

在C#中使用API回调函数的方法

就以EnumChildWindows和EnumChildProc为例子:

首先要声明EnumChildProc
为一个回调函数

public delegate bool EnumChildProc(int hwnd, IntPtr lParam);

delegate为C#中的回调类型,相当于C++里面的CALLBACK,这样就可以在下面声明EnumChildWindows的时候在参数中使用EnumChildProc来作为一个类型。

声明调用user32.dll中的EnumChildWindows,如下:

[DllImport("user32.dll", EntryPoint = "EnumChildWindows")]

public static extern bool EnumChildWindows(int hwndParent, EnumChildProc EnumFunc, IntPtr lParam);

定义一个和EnumChildProc返回值和参数一样的函数:

bool EnumCP(int hwnd,IntPtr lParam)

{

System.Text.StringBuilder sbClassName = new StringBuilder(255);

GetClassName(hwnd, sbClassName, 255);

if ("Static" == sbClassName.ToString())

{

return false;

}

return true;

}

这时就可以使用EnumChildWindows(hwnd, EnumCP, IntPtr.Zero);
当EnumCP返回true的时候,EnumChildWindow继续进行枚举窗口。当EnumCP返回false的时候,EnumChildWindow停止进行枚举窗口。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: