如何在C语言程序中实现系统鼠标光标控制?
Windows 10环境下Turbo C++实现鼠标光标功能操作指南
首先需要明确:Turbo C++是16位DOS时代的开发工具,在Windows 10下运行本质是依赖DOSBox模拟16位DOS环境,所以鼠标操作不能调用Windows原生API,只能通过DOS中断0x33实现,所有操作仅在DOSBox模拟窗口内生效,无法直接控制系统级鼠标。
前置准备
- 确认Turbo C++已在Win10下通过DOSBox完成配置,可正常编译运行基础C语言代码
- 鼠标功能实现依赖
dos.h头文件提供的中断调用函数,无需引入额外第三方库
核心功能实现步骤
1. 初始化鼠标
调用0x33中断的0号功能,检测并初始化鼠标:
#include <dos.h> // 返回值为1说明初始化成功,为0说明未检测到鼠标 int initMouse() { union REGS in, out; in.x.ax = 0; int86(0x33, &in, &out); return out.x.ax; }
2. 显示/隐藏鼠标光标
- 显示光标:调用
0x33中断的1号功能
void showMouse() { union REGS in, out; in.x.ax = 1; int86(0x33, &in, &out); }
- 隐藏光标:调用
0x33中断的2号功能
void hideMouse() { union REGS in, out; in.x.ax = 2; int86(0x33, &in, &out); }
3. 获取鼠标位置和按键状态
调用0x33中断的3号功能,可同时获取光标坐标、按键状态:
// btn参数:位0为1表示左键按下,位1为1表示右键按下 // x、y参数:返回模拟窗口内的坐标,范围为X:0~639,Y:0~199 void getMouseInfo(int *btn, int *x, int *y) { union REGS in, out; in.x.ax = 3; int86(0x33, &in, &out); *btn = out.x.bx; *x = out.x.cx; *y = out.x.dx; }
4. 完整测试代码
#include <dos.h> #include <stdio.h> #include <conio.h> int initMouse() { union REGS in, out; in.x.ax = 0; int86(0x33, &in, &out); return out.x.ax; } void showMouse() { union REGS in, out; in.x.ax = 1; int86(0x33, &in, &out); } void getMouseInfo(int *btn, int *x, int *y) { union REGS in, out; in.x.ax = 3; int86(0x33, &in, &out); *btn = out.x.bx; *x = out.x.cx; *y = out.x.dx; } int main() { int btn, x, y; if (!initMouse()) { printf("未检测到可用鼠标,程序退出\n"); return 1; } showMouse(); printf("按任意键终止程序\n"); // 循环打印鼠标状态 while (!kbhit()) { getMouseInfo(&btn, &x, &y); printf("\r坐标: X=%d Y=%d | 按键状态: %d", x, y, btn); } getch(); return 0; }
注意事项
- 如果需要自定义光标样式,可调用
0x33中断的9号功能配置自定义的指针图案 - 以上所有实现仅在DOSBox模拟环境内生效,如果你需要操作Windows 10系统级的鼠标光标,需要更换编译器为MinGW、MSVC等调用Win32 API实现,Turbo C++无法支持该需求
内容的提问来源于stack exchange,提问作者Kuroko
相关产品推荐
相关产品推荐

