群里有人要用到简单的鼠标键盘模拟操作,但是这方面的函数不太方便,为此打造了这个简陋的函数封装。
此处的鼠标移动是通过屏幕像素换算过来的dpi(0~65535),所以有一点点的误差,测试为1像素。
如果你用的是高分屏,那么强烈建议将程序的DPI缩放选上,将下图里的这个框勾上。
一切关于鼠标移动的和采集位置的,都建议如此设置,否则可能因为高分屏下设置的Windows缩放而导致错位。
另外,这个键盘模拟的功能键比较简陋,一次只能一个键,而且不能同时按两个键,有能力的自己改一改函数。
鼠标码值:
|
按下左按钮。 |
|
释放左按钮。 |
|
按下了右按钮。 |
|
释放了右键。 |
|
按下中间按钮。 |
|
中间按钮被释放。 |
键盘码值:
https://docs.microsoft.com/zh-cn/windows/win32/inputdev/virtual-key-codes
下面是代码,main里面是使用例子,使用时直接将main前面的所有东西复制到自己的程序就好。
#include <stdio.h> //#include <winuser.h>//可以删掉 TDM编译器无法使用 #include <windows.h> #include <stdlib.h> void sendTEXT(char *text){ KEYBDINPUT input; input.dwExtraInfo=0; input.dwFlags=KEYEVENTF_UNICODE; input.time=0; input.wScan=0; input.wVk=0; INPUT aa; aa.type=INPUT_KEYBOARD; aa.ki=input; wchar_t text_utf16[256]={0}; int n1 = MultiByteToWideChar(CP_ACP,0,text,strlen(text),text_utf16,256); for(int i=0;i<n1;i++){ Sleep(100); input.wScan=text_utf16[i]; aa.ki=input; SendInput(1,&aa,sizeof(INPUT)); } } void sendKI(WORD uint_ki){ KEYBDINPUT input; input.dwExtraInfo=0; input.dwFlags=0;//KEYEVENTF_KEYUP; input.time=0; input.wScan=0; input.wVk=0;//必须是1到254之间的值 INPUT aa[2];//数组是为了功能组合键 aa[0].type=aa[1].type=INPUT_KEYBOARD; aa[0].ki=aa[1].ki=input; aa[0].ki.wVk=uint_ki; aa[1].ki.dwFlags=KEYEVENTF_KEYUP; SendInput(2,aa,sizeof(INPUT)); } void sendMI(WORD mi){ MOUSEINPUT input; input.dx=0; input.dy=0; input.dwFlags=mi; input.mouseData=0; input.time=0; input.dwExtraInfo=0; INPUT aa; aa.type=INPUT_MOUSE; aa.mi=input; SendInput(1,&aa,sizeof(INPUT)); } void sendXY(WORD x,WORD y){//这种计算方式会有误差,很小很小 RECT rect; GetWindowRect(GetDesktopWindow(),&rect); MOUSEINPUT input; input.dx=x*(65535/(float)rect.right); input.dy=y*(65535/(float)rect.bottom); input.dwFlags=MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE; input.mouseData=0; input.time=0; input.dwExtraInfo=0; INPUT aa; aa.type=INPUT_MOUSE; aa.mi=input; SendInput(1,&aa,sizeof(INPUT)); } int main(void){ while(1){ static int i=0;i++; char cc[200]={"刷屏代码就这?"}; char c2[20]={""}; Sleep(1000); sendTEXT(strcat(cc,itoa(i,c2,10))); sendKI(0x0D);//0x20空格 0x0D回车 } //sendXY(200,200);//设置鼠标位置,如果出问题请设置DPI //sendMI(0x0002);//0x0002左键按下 0x0004左键抬起 0x0008右键按下 0x0010右键抬起 }
如果有问题的话,点击顶部的联系,或联系我的qq:2762171125,感谢您的支持。
点击链接加入群聊【MC</>开发者团队】:https://jq.qq.com/?_wv=1027&k=Lef5I9ON