C#调用系统API
[DllImport("动态库名")]
public static extern 返回值类型 函数名称 (参数);
需要使用命名空间 System.Runtime.InteropServices;
DllImport属性用来指定包含外部方法的动态连接库的位置。 "动态库名"指出了库名,static 指明它不属于特定的对象。extern 指明是一个外部的方法。带有DllImport 属性的方法必须带有修饰符extern
所有的API都在下面3个DLL中实现的。
Kernel、User、GDI
1. KERNEL
它的库名是:KERNEL32.DLL,它是操作系统管理的API集
Process loading. 加载进程
Context switching.
File I/O. 文件操作
Memory management. 内存管理
比如:GlobalMemoryStatus 函数获得目前系统物理虚拟内存的使用信息。
2. USER
在WIN32下,它的库名是 USER32.DLL
它管理全部的用户界面,比如:
Windows 窗口
Menus 菜单
Dialog Boxes 对话框
Icons etc., 图标等
比如:DrawIcon 画一个图标在指定的设备上。
3. GDI (Graphical Device Interface)
这个DLL是GDI32.dll,它负责图像的输出,使用GDI绘出窗口,菜单,对话框
It can create Graphical Output. 输出图像
比如:CreateBitmap 函数创建一个指定宽度、高度和颜色格式的位图。
下面用一个例子来说明如何调用系统API
通用调用GetLocalTime来取得系统时间的相关信息
API说明:
VOID GetLocalTime(
LPSYSTEMTIME lpSystemTime // address of system time structure
);
LPSYSTEMTIME这个是个结构,定义如下:
WORD wYear; //年
WORD wMonth; //月
WORD wDayOfWeek;//星期;0为星期日,1为星期一…
WORD wDay; //日
WORD wHour; //时
WORD wMinute; //分
WORD wSecond; //秒
WORD wMilliseconds;//毫秒
} SYSTEMTIME;
用c#调用
{
//声明结构体
[StructLayout(LayoutKind.Sequential)]
public struct SystemTime
{
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMiliseconds;
}
[DllImport("Kernel32.dll")]
public static extern void GetLocalTime(ref SystemTime sysTime);
static void Main(string[] args)
{
SystemTime sysTime = new SystemTime();
GetLocalTime(ref sysTime);
Console.WriteLine("{0}/{1}/{2}", sysTime.wYear,sysTime.wMonth,sysTime.wDay);
Console.ReadKey();
}
}