标签:
以前我写过通过WMI来获取有关系统信息的系列文章,确实通过WMI能够恨轻易地实现很多我们想实现的功能,不过有些情况下我们很难利用WMI来实现一些 复杂的功能,比如最近我做的一个项目,其中有一个功能就是要更改系统当前时间,利用WMI就很难实现(我没有找到相关的方法),还有一些其它方面的功能, 也比较难以通过WMI来实现,也许是WMI需要较高的权限才能执行的原因吧。所以,尽管我们不愿意,但是又不得不通过调用Windows 的API来实现。本文的目的就是讲述如何在C#中调用Windows的系统API。
本文将按照下面的步骤分别讲解:
API简介
C#中的简单数据类型与API中的数据类型对应关系
如何在调用API时传递复杂参数:封装类、结构和联合
如何调用API
如何确保成功调用API
Wtypes.h 中的非托管类型 | 非托管 C 语言类型 | 托管类名 | 说明 |
---|---|---|---|
HANDLE
|
void*
|
System.IntPtr
|
在 32 位 Windows 操作系统上为 32 位,在 64 位 Windows 操作系统上为 64 位。
|
BYTE
|
unsigned char
|
System.Byte
|
8 位
|
SHORT
|
short
|
System.Int16
|
16 位
|
WORD
|
unsigned short
|
System.UInt16
|
16 位
|
INT
|
int
|
System.Int32
|
32 位
|
UINT
|
unsigned int
|
System.UInt32
|
32 位
|
LONG
|
long
|
System.Int32
|
32 位
|
BOOL
|
long
|
System.Int32
|
32 位
|
DWORD
|
unsigned long
|
System.UInt32
|
32 位
|
ULONG
|
unsigned long
|
System.UInt32
|
32 位
|
CHAR
|
char
|
System.Char
|
用 ANSI 修饰。
|
LPSTR
|
char*
|
System.String 或 System.Text.StringBuilder
|
用 ANSI 修饰。
|
LPCSTR
|
Const char*
|
System.String 或 System.Text.StringBuilder
|
用 ANSI 修饰。
|
LPWSTR
|
wchar_t*
|
System.String 或 System.Text.StringBuilder
|
用 Unicode 修饰。
|
LPCWSTR
|
Const wchar_t*
|
System.String 或 System.Text.StringBuilder
|
用 Unicode 修饰。
|
FLOAT
|
Float
|
System.Single
|
32 位
|
DOUBLE
|
Double
|
System.Double
|
64 位
|
如何在调用API时传递复杂参数:封装类、结构和联合
类和结构在 .NET Framework 中是类似的。它们都可以具有字段、属性和事件。它们也有静态和非静态方法。一个显著区别是结构属于值类型而类属于引用类型。
结构:
比如一个常用函数,用于获取日期时间的,原始声明如下:
VOID GetSystemTime(LPSYSTEMTIME lpSystemTime);
成员名称 | 说明 |
Auto | 运行库自动为非托管内存中的对象的成员选择适当的布局。使用此枚举成员定义的对象不能在托管代码的外部公开。尝试这样做将引发异常。 |
Explicit | 对象的各个成员在非托管内存中的精确位置被显式控制。每个成员必须使用 FieldOffsetAttribute 指示该字段在类型中的位置。 |
Sequential | 对象的成员按照它们在被导出到非托管内存时出现的顺序依次布局。这些成员根据在 StructLayoutAttribute.Pack 中指定的封装进行布局,并且可以是不连续的。 |
成员名称 | 说明 |
Auto | 针对目标操作系统适当地自动封送字符串。在 Windows NT、Windows 2000、Windows XP 和 Windows Server 2003 系列上默认值为 Unicode;在 Windows 98 和 Windows Me 上默认值为 Ansi。尽管公共语言运行库默认值为 Auto,使用语言可重写此默认值。例如,默认情况下,C# 将所有方法和类型都标记为 Ansi。 |
Ansi | 以多字节字符串的形式封送字符串。 |
None | 此值已过时,它与 CharSet.Ansi 具有相同的行为 |
Unicode | 以 Unicode 2 字节字符形式封送字符串。 |
待续.....
本文出自 “周公(周金桥)的专栏” 博客,请务必保留此出处http://zhoufoxcn.blog.51cto.com/792419/162958
标签:
原文地址:http://www.cnblogs.com/yisionwa/p/5908141.html