我爱Aspx >> C#.Net >> 用Visual C#调用Windows API函数[DllImport("User32.dll")]
public static extern void GetSystemTime(MySystemTime st);
}
回调函数的传递:从受管辖的代码中调用大多数动态链接库函数,你只需创建一个受管辖的函数定义,然后调用它即可,这个过程非常直接。
如果一个动态链接库函数需要一个函数指针作为参数,你还需要做以下几步:
首先,你必须参考有关这个函数的文档,确定这个函数是否需要一个回调;第二,你必须在受管辖代码中创建一个回调函数;最后,你可以把指向这个函数的指针作为一个参数创递给DLL函数,.
回调函数及其实现:回调函数经常用在任务需要重复执行的场合,譬如用于枚举函数,譬如Win32 API 中的EnumFontFamilies(字体枚举), EnumPrinters(打印机), EnumWindows (窗口枚举)函数. 下面以窗口枚举为例,谈谈如何通过调用EnumWindow 函数遍历系统中存在的所有窗口
分下面几个步骤:
1. 在实现调用前先参考函数的声明
BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARMAM IParam)
显然这个函数需要一个回调函数地址作为参数.
2. 创建一个受管辖的回调函数,这个例子声明为代表类型(delegate),也就是我们所说的回调,它带有两个参数hwnd和lparam,第一个参数是一个窗口句柄,第二个参数由应用程序定义,两个参数均为整形。
当这个回调函数返回一个非零值时,标示执行成功,零则暗示失败,这个例子总是返回True值,以便持续枚举。
3. 最后创建以代表对象(delegate),并把它作为一个参数传递给EnumWindows 函数,平台会自动地 把代表转化成函数能够识别的回调格式。
[C#]
using System;
using System.Runtime.InteropServices;
public delegate bool CallBack(int hwnd, int lParam);
public class EnumReportApp {
[DllImport("user32")]
public static extern int EnumWindows(CallBack x, int y);
public static void Main()
{
CallBack myCallBack = new CallBack(EnumReportApp.Report);
EnumWindows(myCallBack, 0);
}
public static bool Report(int hwnd, int lParam) {
Console.Write("窗口句柄为");
Console.WriteLine(hwnd);
return true;
Ҷƪл˵?
编写C#程序实现动态系统托盘图标[05-07]
用C#实现电脑+数据线+手机模式发..[05-07]
C#语言中的重要知识详细介绍与解..[05-07]
完全解读C#.NET中的正则表达式[05-07]
实例学C#.net下轻松制作不规则窗..[05-07]
C#:消息队列应用程序[05-05]
用C#创建Web应用程序[05-05]
用C#创建Web应用程序[05-05]
源码推荐:一个使用C#绘制图形引..[05-05]
在C#里如何调用标准DLL函数[05-05]
编写C#程序实现动态系统托盘图标[05-07]
用C#实现电脑+数据线+手机模式发..[05-07]
C#语言中的重要知识详细介绍与解..[05-07]
完全解读C#.NET中的正则表达式[05-07]
实例学C#.net下轻松制作不规则窗..[05-07]
火影忍者第232话(隐居婆婆的决意..[05-06]
了解WEB页面工具语言XML(六)展望[05-06]
了解WEB页面工具语言XML(五)好处[05-06]
了解WEB页面工具语言XML(四)应用..[05-06]
了解WEB页面工具语言XML(三)支持..[05-06]