Ø 简介
本文主要记录 Windows API 的调用示例,因为这项技术并不常用,属于 C# 中比较孤僻或接触底层的技术,并不常用。但是有时候也可以借助他完成一些 C# 本身不能完成的功能,例如:通过句柄获取其他程序数据,或者向操作系统发出指定的消息等等。
提示:关于 Windows API 的函数有很多,不需要将所有的函数都非常了解,笔者也只是将用到过的函数记录下来,方便以后需要时可以快速编写。
1. 鼠标事件 API
1) 函数原型:void mouse_event(
long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo)
2) 函数说明:该函数合成鼠标的移动和点击事件,并将其插入到事件队列中。
3) 参数:
cButtons, 正数表示向上滚动,负数表示向下滚动。
其他:参考【Windows API 函数参考手册】
4) 典型示例:
1. 模拟鼠标(滚轮)滚动事件(C# Code)
1) 函数声明
[DllImport("user32.dll")]
private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
2) 调用代码
const int MOUSEEVENTF_WHEEL = 0x0800;
var timer = new System.Threading.Timer(new TimerCallback(o =>
{
mouse_event(MOUSEEVENTF_WHEEL, 0, 0, 500, 0);
WriteLine(string.Format("鼠标已滚动,线程:{0}", GetThreadId()));
}), null, 0, 50);
3) 运行结果
2. 钩子(Hook) API
1) 什么是钩子:钩子实际是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
2) 典型示例
1. 获取其他程序中的控件值