如何使用C#操作WinAPI
Posted 陈立扬
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用C#操作WinAPI相关的知识,希望对你有一定的参考价值。
Windows API是对Windows操作系统的API函数,在C#中调用Windows API的实质是托管代码对非托管代码的调用。
主要使用的格式就是:
using System.Runtime.InteropServices;
namespace TestWinAPI1
{
class Program
{
static void Main(string[] args)
{
Beep(100, 100);
}
[DllImport("kernel32", CharSet = CharSet.Ansi)]
public static extern bool Beep(int frequery, int duration);
}
}
其中的Beep就是Win API的调用,使用[DllImport("kernel32")]属性进行调用。
这个函数在MSDN中的原本定义是:
C++
BOOL WINAPI Beep(
__in DWORD dwFreq,
__in DWORD dwDuration
);
我们想要调用BeepAPI,就必须:
1.将DWORD对应为C#中的int,相应的参数个数和位置设置正确
2.调用的函数名和WinAPI中的函数名一致
这样,我们在C#中就可以使用Win API对Windows进行操作。
这里几个资源是使用WindowsAPI不可或缺的:
MSDN:http://msdn.microsoft.com/en-us/library/ee663300(VS.85).aspx
推荐的入门教程:http://www.docin.com/p-4510006.html
使用WINAPI的难点:
1.C++中的各个数据类型如何对应到C#中?
使用C#中的那个数据类型对应那个C++的数据类型没有唯一的规定,但是应该站在内存使用的角度,选择内存占用大小一致。
当C++中存在指针的时候,我们可以使用ref来传递指针
2.如果C++中定义了数据结构如何操作?
我们也应该在C#中定义与之存储结构一致的数据结构
以下是用WinAPI 模拟鼠标定位和单机左键的操作:
简要描述:
使用了mouse_event,GetCursorPos,SetCursorPos三个API
mouse_event((uint)MouseEventFlags.LEFTDOWN|(uint)MouseEventFlags.LEFTUP, 0, 0, 0, 0);
代表了单击左键的动作
int setRight = SetCursorPos(27, 881); 中的27,881是屏幕上的绝对位置
以上是关于如何使用C#操作WinAPI的主要内容,如果未能解决你的问题,请参考以下文章
如何在纯 C++ 中高效快速地清理我的 GDI 对象 - winapi(不是 .net,c#)?