C语言在控制台上实现鼠标操作的方法
文章目录
- 了解windows库函数
- 了解句柄
- 实现思路与代码
在制作面向用户系统时,我们往往需要设置除输入参数外更为灵活的操作方式,例如鼠标点击、按键按下(无阻塞输入)等;同时,我们需要制作更为精美的 UI
而不是简陋的黑白界面。然而,纯C语言本身并不提供这些函数,为实现这些操作,我们需要调用 windows.h
库中的函数(当然大前提是用户使用 windows
系统)。
为实现鼠标操作,我们所涉及到的有关函数有:
了解windows库函数
GetCursorPos(POINT* point);
获得鼠标在桌面中的坐标(左上角为原点),其中POINT
是一个结构体类,包含x和y两个成员以表示横坐标和纵坐标。GetWindowRect(HWND hwnd,LPRECT* lprect);
获得指定窗口的坐标信息(包括顶部和底部的横坐标,左端和右端的纵坐标),其中HWND
是一个句柄类(句柄概念在后文中再说明),LPRECT
是一个结构体类,包含top
,bottom
,left
,right
分别表示顶部、底部、左端、右端的坐标。GetAsyncKeyState(int vKey);
判断指定按键是否按下,vKey
为按键对应的ASCII
值,如图所示。
FindWindow(LPCSTR lpClassName,LPCSTR lpWindowName);
返回指定窗口的句柄,lpClassName
指向一个用于指定类名的字符串,若为NULL则查找所有窗口;lpWindowName
指定一个用于查找窗口名。
接下来还有一些windows.h
库中的特殊函数:
SetConsoleTitle(LPCSTR lpcstr);
为程序设定标题。Sleep(int int);
休眠,即暂停程序int
秒后继续运行。
了解句柄
接下来说明句柄的概念:句柄是一种特殊指针(另一种说法为一种整型),用于标识应用程序中的对象(如窗口,按钮,图标等)。当前系统中每一个进程,每一个控件,都根据其虚拟内存地址拥有其对应的唯一句柄。于是,我们可以通过一个句柄找到对应的对象来指定操作。
知道以上函数后,我们就可以正式编写程序了。
实现思路与代码
思路:通过一个循环反复检测鼠标是否按下,如果按下,则检测当前鼠标光标在控制台中所对应的坐标,通过对控制台中UI
的坐标进行对应来判断操作。值得一提的是,windows.h
库中没有直接返回鼠标光标在控制台窗口中坐标的函数,于是我们通过得到鼠标光标在桌面中的坐标和控制台窗口在桌面中的坐标,来计算鼠标光标与控制台窗口的相对位置。
#include<stdio.h>
#include<windows.h>void MouseOpreate(int *x,int *y);
int main(){...SetConsoleTitle("憨憨");//设定窗口标题...int x,y;MouseOpreate(&x,&y);if((0<=x && x<=100)&&(0<=y && y<=20)){//通过UI在程序中对应的坐标指定操作...}else if(...){...}
}
void MouseOpreate(int *x,int *y){POINT *ptrpos;//声明POINT结构体类存储鼠标坐标LPRECT rect;//声明LPRECT结构体指针存储窗口坐标信息HWND hwnd=FindWindow(NULL,"憨憨");//根据上述设定的标题查找句柄,第一个形参设为NULL意味着查找系统中所有句柄ptrpos=(POINT*)malloc(sizeof(POINT)+64);rect=(LPRECT*)malloc(sizeof(LPRECT)+64);//为结构体指针分配内存空间for(;;){Sleep(500);//通过休眠指定循环周期为500毫秒if(GetAsyncKeyState(VK_LBUTTON)){//如果鼠标左键按下,其中VK_LBUTTON是windows.h库中定义的宏,对应鼠标左键对应的ASCII值GetWindowRect(hwnd,rect);//根据查找标题"憨憨"得到的句柄返回对于窗口的坐标并存储在rect中GetCursorPos(ptrpos);//返回鼠标对应的坐标并存储在ptrpos中*x=ptrpos->x-rect->left;//鼠标横坐标-控制台窗口左端横坐标得到鼠标相对控制台窗口的横坐标*y=ptrpos->y-rect->top;//同理得到鼠标相对的纵坐标break;//得到坐标后跳出循环}}
接下来,我们只需要在检测位置画上对应的UI
,就可以完成判定了。
C语言在控制台上实现鼠标操作的方法相关推荐
- win7鼠标指针主题包_Windows10系统用键盘来代替鼠标操作的方法
自动化人 - 知乎www.zhihu.com 在电脑上工作的时候,鼠标突然失效了,紧急情况,一时没办法去找新的鼠标更换,怎么办?小伙伴们可能会遇到鼠标不好使,而想用键盘上的按键来代替鼠标操作的情况, ...
- 用c 语言如何实现鼠标画图,C在控制台上实现鼠标画图功能
#include #include #include HANDLE hOut; HANDLE hIn; void ClearScreen(void); void DispMousePos(COORD ...
- Action Chains类 使用鼠标操作使用方法
1.context.click() 鼠标双击 2.double_click() 鼠标双击 3.drag_and_drop() 鼠标拖动 4..move_to_element() 鼠标悬停在一个元素上 ...
- 向上滚动 终端_终端 - 如何在Linux控制台上向上/向下滚动?
终端 - 如何在Linux控制台上向上/向下滚动? 我认识到Up / Down会给你命令历史. 但是,你如何通过上下滚动查看过去的输出? 我使用了Shift + Page Up / Page Down ...
- selenium对浏览器操作、鼠标操作等总结
1 控制浏览器 Selenium 主要提供的是操作页面上各种元素的方法,但它也提供了操作浏览器本身的方法,比如浏览器的大小以及浏览器后退.前进按钮等. 1.1 控制浏览器窗口大小 在不同的浏览器大小下 ...
- 真就释放双手?C#模拟鼠标操作
前言 最近玩贪玩蓝月,老是让我呆呆站着领在线礼包?我可能每过几分钟就领一下礼包吗?害,要是有人能帮我一会点一下鼠标就好了- -于是,奇怪的知识又增加了- - 页面设计 注:因为控件可能有点多,代码中也 ...
- pythonselenium教程模拟鼠标和键盘_【02篇】python+selenium实现Web自动化:鼠标操作和键盘操作!...
一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第二篇博 ...
- selenium模拟网页的键盘鼠标操作
Selenium可以模拟键盘和鼠标操作,下面是一些常用的方法: 1. 模拟键盘输入 ```python from selenium.webdriver.common.keys import Keys ...
- c++ double 只输出五位_c 语言第四章 在控制台上数据的输入和输出
1 数据输出 我们之前已经使用过printf()函数来实现数据在控制台上输出 #include<stdio.h> int main(){printf("hello world&q ...
最新文章
- SLAM Scan-Matching/Registration
- swoole必须和PHP使用吗,php有必要使用swoole吗
- 如何使用HTML5,CSS3和PHP创建一个联系表格
- Python 计算程序运行时间
- 程序员笔试面试基础知识资料整理
- LSMW、BDC、CATT 区别
- NET问答: 如何将十六进制的 #FFDFD991 转成 C# 中的 Color 类?
- Spring MVC 3:上传多个文件
- 训练日志 2018.9.1
- 190829课堂母版与子版
- Nagios配置监控windows客户端
- Scratch 模拟病毒传染小程序
- webstorm 破解的方法
- 明解C语言第三章习题
- 《暗时间》经典(一)
- 阿里P6+面试:介绍下观察者模式?
- CSS Sprite雪碧图
- 安科瑞无线测温方案part1
- 11.第十二章.采购管理
- 还在纠结交易系统的细节吗?看这篇文章就够了!
热门文章
- IC学习笔记——DRV8804
- 贾扬清:如何看待人工智能方向的重要问题?
- PageHelper这种情况下有坑
- 公众号名称搜索排名多久更新
- 谷歌是怎么对网站进行排名的
- Non-resolvable parent POM for com.example:demo:0.0.1-SNAPSHOT: Could not transfer artifact org.sprin
- Linux 开发学习
- 技术员 Ghost Win10 x64 装机版/纯净版 201710
- 他们真的在意信用么?
- 使用Android模拟机开发调试移动端页面