c#调用系统函数

C#调用系统API

 

[DllImport("动态库名")]
public static extern
返回值类型 函数名称 (参数);

需要使用命名空间 System.Runtime.InteropServices;
DllImport
属性用来指定包含外部方法的动态连接库的位置。 "动态库名"指出了库名,static 指明它不属于特定的对象。extern 指明是一个外部的方法。带有DllImport 属性的方法必须带有修饰符extern

所有的API都在下面3DLL中实现的。
Kernel
UserGDI
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)
这个DLLGDI32.dll,它负责图像的输出,使用GDI绘出窗口,菜单,对话框
It can create Graphical Output.
输出图像
比如:CreateBitmap 函数创建一个指定宽度、高度和颜色格式的位图。

下面用一个例子来说明如何调用系统API

通用调用GetLocalTime来取得系统时间的相关信息

API说明:

VOID GetLocalTime(

 LPSYSTEMTIME lpSystemTime   // address of system time structure

);

LPSYSTEMTIME这个是个结构,定义如下:

SYSTEMTIME结构struct _SYSTEMTIME { 
    WORD wYear; 
//
    WORD wMonth; //
    WORD wDayOfWeek;//星期;0为星期日,1为星期一… 
    WORD wDay; //
    WORD wHour; //
    WORD wMinute; //
    WORD wSecond; //
    WORD wMilliseconds;//毫秒 
} SYSTEMTIME;

 c#调用

c#调用API函数 class Program
    {
        
//声明结构体
        [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();
        }
    }

 

posted @ 2009-02-08 21:18  十二号的国王  阅读(617)  评论(0编辑  收藏  举报