- 模拟键盘输入
函数: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键
}
注意: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);
}