LINUX DOTNET      Linux DotNET 中文社区

Linux .NET编程与应用技术之专业网站:www.linuxdot.net !     返回首页    
   
[楼主] 在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停止进行枚举窗口。 

上面代码实行的是当找到一个Static类的窗口后,停止枚举。

作者:匿名   发布时间:08年02月07日   可选操作:删除 回复

 
   
   

留言回复:
标题: * 标题必填
作者:   * 请填上你的名字  
操作键:   * 填入几个字母表示是您写的,便于进一步操作
发言内容:
 
发贴者须知:
1、您无需注册即可发贴,但是,贴子内容必须在法律法规和社会公德所允许的范围内;
2、本站专注IT技术,谢绝包括政治、社会、情感等任何与IT技术无关的贴子在本站发表;
3、本站保留对任何贴子进行删除、禁用、更改、举报、追究等所有权利;
 
今天是: 周七  周六  周二  周三  周四  周五  周一