利用程序实现检测鼠标位置功能,事件驱动【第一部分】
参考资料来源:微软官方文档https://docs.microsoft.com/en-us/windows/console/reading-input-buffer-events
#include<windows.h>
void main(void)
{
//定义变量:hStdin 本控制台程序句柄;cNumRead 获取消息数目;fdwMode用来设置控制台接收消息类型;irInBuf用来存储读取到的事件。
HANDLE hStdin;
DWORD cNumRead, i;
INPUT_RECORD irInBuf[128];
//获取控制台句柄
hStdin=GetStdHandle(STD_INPUT_HANDLE);
if (hStdin == INVALID_HANDLE_VALUE)
{
printf("获取控制台句柄失败");
Sleep(10000);
ExitProcess(0);
}
//不断循环获取事件列表,主要函数是ReadConsoleInput(hStdin, irInBuf,128,&cNumRead),
while(1)
{
if(! ReadConsoleInput(hStdin, irInBuf,128,&cNumRead))
{
printf("读取事件列表失败");
Sleep(10000);
ExitProcess(0);
}
for (i = 0; i < cNumRead; i++)
{
switch(irInBuf[i].EventType)
{
case MOUSE_EVENT:
{
printf("\r position:x %d y %d",irInBuf[i].Event.MouseEvent.dwMousePosition.X,irInBuf[i].Event.MouseEvent.dwMousePosition.Y);
break;
}
default:
{
printf("\r 非检测事件类型");
break;
}
}
}
}
}