关于鼠标键盘事件

- 模拟键盘输入

函数:keybd_event
在这里插入图片描述

/*实现 WIN+D 的组合键操作*/
#include<windows.h>
int main()
{
    keybd_event(VK_LWIN,0,0,0); //按下WIN键
    keybd_event('D',0,0,0);//按下D键
    keybd_event('D',0,KEYEVENTF_KEYUP,0);//松开D键
    keybd_event(VK_LWIN,0,KEYEVENTF_KEYUP,0);//松开WIN键
}

常见Windows键盘按键虚拟码
虚拟键码对照表

注意:keybd_event函数中是没有窗口句柄作为参数的,因为keybd_event是全局模拟按键的,只对前台窗口(即当前的活动窗口)起作用,但是如果模拟的按键正好也是某个窗口的全局热键消息,那该窗口也能接收到。

- 模拟鼠标按键点击

函数:mouse_event
在这里插入图片描述

/*模拟单击鼠标右键*/
#include<windows.h>
int main()
{
    mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
    mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
   //或:mouse_event(MOUSEEVENTF_RIGHTDOWN|MOUSEEVENTF_RIGHTUP,0,0,0,0);
}

- 检测是否按下鼠标或键盘的某键

一个宏定义:
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
/* 注意:检测的是按下的情况,即还没松开的时候 */

/*检测是否按下空格键*/
#include<iostream>
#include<windows.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
int main()
{
    std::cout<<"start"<<std::endl;
    while(1){
        if(KEY_DOWN(VK_SPACE)){
            Sleep(100);//100ms,我们手按下不会在瞬间松开,所以这里程序需要sleep一下
            std::cout<<"000";
        }
    }
}

- 检测是否有键盘输入

函数:int kbhit(void);

功能及返回值: 非阻塞函数,检查当前是否有键盘输入,若有则返回一个非0值,否则返回0。
C++语言包含头文件:include <conio.h>,C语言不需包含额外头文件。

#include<stdio.h>
#include<conio.h>
int main()
{
    while(1)
        if(kbhit())
            switch(getch()){ //getch是不回显函数,阻塞函数,当用户按下某个字符时,函数自动读取,无需按回车
                case 'a':printf("111\n");break;
                case 'b':printf("222\n");break;
                default: printf("000\n");break;
            }
    return 0;
}

- 获取鼠标点击位置坐标

函数: GetCursorPos

/*注意:要先取消快速编辑模式*/
#include<iostream>
#include<windows.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
int main()
{
    std::cout<<"start"<<std::endl;
    //HWND hw=FindWindow("ConsoleWindowClass",NULL); ///得到控制台窗口的句柄
    while(1){
        POINT P;
        while(!KEY_DOWN(VK_LBUTTON))///按下鼠标左键时退出while循环,执行以下获取当前点击位置坐标的代码
            Sleep(75);
        GetCursorPos(&P);///获取鼠标当前位置屏幕坐标(位置坐标基于整个屏幕)
        //ScreenToClient(hw,&P); ///将屏幕位置坐标转换为控制台窗口坐标
        std::cout<<P.x<<' '<<P.y<<std::endl;
        Sleep(500);
    }
}

- 移动鼠标位置

函数:SetCursorPos
在这里插入图片描述

/*鼠标移动到指定位置进行左键点击*/
#include<windows.h>
int main()
{
    SetCursorPos(919,31); 
    mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_LEFTUP,0,0,0,0);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值