C语言控制和鼠标键盘 (windows环境)

news/2024/11/7 16:51:12/

C语言控制鼠标点击以及键盘输入

  • 使用场景
    • 主要的几个函数介绍
    • 实例
    • 键盘输入对应值

使用场景

当需要实现一些重复的点击,或者自动输入的情况下,可以使用到类似的功能,例如网页的自动刷新,QQ的自动输入,(嘴炮连发也可以)等,自己发掘呗,传奇这种游戏挂机也是可以的。

主要的几个函数介绍

1.GetSystemMetrics()
这个函数主要用于获取当前电脑的分辨率,通过参数SM_CXSCREEN,SM_CYSCREEN,可以分别获取电脑分辨率的X和Y,例如电脑分辨率为1440*960,那么:
X_LEN=GetSystemMetrics(SM_CXSCREEN)
Y_LEN=GetSystemMetrics(SM_CYSCREEN)
X_LEN=1440,Y_LEN=960

2.mouse_event()
移动鼠标到指定位置,这里我们不需要去详细了解各个参数的内容,各位使用以下例子即可
mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE, x * 65535/x_len, y * 65535/y_len, 0, 0);
其中,
x,y代表指定位置的坐标
x_len,y_len代表屏幕分辨率

常用动作:
//鼠标左键按下
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
//鼠标左键抬起
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

3.GetCursorPos()
通过函数GetCursorPos(POINT* ptB)可以获得当前鼠标所在的位置.
例如:
POINT ptB = { 0, 0 };
GetCursorPos(&ptB);//获取鼠标位置
ptB.x,ptB.y的值就是鼠标的当前位置值.

--------------------------* 通过以上几个函数可以实现例1 *---------------------

4.keybd_event()
通过keybd_event函数可以执行键盘动作,常用的情形有

keybd_event(put,0,0,0); // 第三个参数为0表示按下
keybd_event(put,0,2,0); // 第三个参数为2表示抬起
其中put表示按键码(章节尾有给出按键和按键码的映射表格)
*注意:表中,‘a’ ~ ‘z’的映射值与ASCALL中大写字母’A’ ~ 'Z’的值相同,这也意味着
keybd_event(‘A’,0,0,0);
keybd_event(‘A’,0,2,0);
可以直接模拟出键盘按下a键的操作,建立在这个基础上我实现了例2函数

实例

例1:在当前鼠标位置进行单击

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <windows.h>
int main(int argc,char *argv[])
{POINT ptB = { 0, 0 };int x_len,y_len;GetCursorPos(&ptB);//获取鼠标位置/*获取屏幕分辨率*/x_len=GetSystemMetrics(SM_CXSCREEN);y_len=GetSystemMetrics(SM_CYSCREEN);//将鼠标光标移动到 指定的位置     例子中屏幕分辨率1440x900  在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE, ptB.x * 65535/x_len, ptB.y * 65535/y_len, 0, 0);Sleep(50);//稍微延时50ms mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//鼠标左键按下 mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//鼠标左键抬起return 0;
}

例2:传入字符串(字母和数字),模拟键盘进行输入

void inputRun( const char *inStr)
{unsigned int i = 0;bool shiftFlag = false;char put;for(i=0; i <strlen(inStr);i++){put = inStr[i];if(put >= 'a' && put <= 'z'){put = put-32;//小写时进行值的转换}else if(put >= 'A' && put <= 'Z'){//大写的时候按住shiftkeybd_event(16,0,0,0);shiftFlag = true;}keybd_event(put,0,0,0);keybd_event(put,0,2,0);if(shiftFlag == true){//松开shiftkeybd_event(16,0,2,0);}Sleep(60);}
}

键盘输入对应值

按键码映射表


http://www.ppmy.cn/news/674038.html

相关文章

c语言中的宏的妙用

文章背景 前段时间&#xff0c;为了做一个项目中的程序&#xff0c;大致是实现SQL类似功能的索引功能&#xff0c;需要建立一张索引表&#xff0c;分析后&#xff0c;该表是在程序运行前就存在的&#xff0c;在参考优秀代码后&#xff0c;自己还是决定用宏来写这样一个功能的实…

【C语言进阶】宏

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a;> c语言学习 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是…

Centos开放端口以及查看端口和防火墙配置命令

查看防火墙某个端口是否开放 firewall-cmd --query-port8080/tcp 开放防火墙端口 8080 firewall-cmd --add-port8080/tcp --permanent 开启端口后需执行 firewall-cmd --reload 使其生效 重新加载防火墙规则 firewall-cmd --reload 关闭防火墙端口 firewall-cmd --remove-port8…

智慧园区平台建设解决方案

智慧园区是指利用现代互联网物联网技术&#xff0c;对园区内的设施、设备和人员进行高效管理和智能化运营的一种模式。越来越多的城市开始致力于发展智慧园区&#xff0c;实现园区内的资源共享和高效利用。为了让智慧园区达到最佳的效果&#xff0c;我们需要从平台建设方面入手…

gta5怎么设置画质最好_GTA5:如何让你的游戏画质更好,游戏更顺手,一波设置教给大家!...

GTA5&#xff1a;如何让你的游戏画质更好&#xff0c;游戏更顺手&#xff0c;一波设置教给大家&#xff01; 大家都知道GTA5这个游戏&#xff0c;这个游戏无疑最受玩家瞩目热门游戏之一&#xff0c;但是因为这款游戏对配置的要求比较高&#xff0c;如果想达到完美的平衡以及游戏…

win10鼠标灵敏度怎么调_刺激战场:吃鸡灵敏度怎么调最科学?大神主播手把手教学诀窍!...

各位热爱吃鸡的小伙伴们&#xff0c;大家好&#xff0c;这里是由无双为大家带来的一手刺激战场资讯&#xff01; 不少玩家都曾思考过技术是否和设备或者游戏设置挂钩&#xff0c;刺激战场作为一款手游难免会让玩家引起这些思考。但是无双认为设备对游戏的影响肯定是有&#xff…

绝地求生——PUBG吃鸡游戏模糊,画质很差

如果不是配置低&#xff0c;那就是没有开启全屏模式 打开设置在里面找到一个选项&#xff0c;把游戏从无边框改为全屏显示

灵敏度上下左右抖动怎么调_不求人:主播跟大神的灵敏度不适合自己?手把手教你调《和平精英》灵敏度...

玩《和平精英》这种钢枪游戏,手不抖、压枪亚得稳非常重要。但是度对很多玩家来说即使看了无数个主播大神的教学视频、甚至把主播的灵敏度直接照搬过来还是压不住枪,这究竟是什么原因呢? 其实每部手机的灵敏度跟个人的指法、操作习惯都不是完全一样的。而有的玩家自己用的平板…