脚本是什么应该就不用多说了吧,想必想写脚本的人一定知道什么是脚本;
众所周知,c++不是写脚本的最佳选择;但我最熟悉c++,所以一直在用它写脚本,偶尔用html5写写github的网页,js什么的就靠其他大神的成就啦~。
接下来介绍c++的基本用法;
一、鼠标的控制:
正如小数有double,整数有int,鼠标也有自己的定义:POINT;
POINT p; //我们定义了一个名字叫做p的鼠标;
那么靠这个p可以做什么呢?
1.有时候为了控制鼠标,我们需要知道屏幕某个点的坐标:
p是封装的,也就是说可以调用p.x和p.y,即:
cout<<p.x<<" "<<p.y<<endl; //输出的便是鼠标在屏幕上的坐标;
但是,定义p之后直接调用p.x和p.y是不行的,因为你没有给p赋值。因此调用:
GetCursorPos(&P); //坐标便是目前鼠标的位置,以屏幕的左上角为(0,0)的平面直角坐标系,右下角便是你屏幕的分辨率最大值;大小写要注意,一定不能写错;
有人测试后会发现,我仅仅是读到了一瞬间的鼠标位置,难道每测一次都要运行一次吗?
算法的基础去哪了?while大循环啊!
#include <bits/stdc++.h>
#include <windows.h>
#define inc(i,a,b) for(register int i=a;i<=b;i++)
using namespace std;
int main()
{
POINT P;
while(1){
GetCursorPos(&P);
printf("%d %d \r",P.x,P.y);
}
}
请注意,脚本处处是坑,prinf("\r")的用法是接下来输出的内容从这一行开始输出,可以覆盖原来的内容;如果没被覆盖完全那么没被覆盖的部分就仍然保持原来的内容;
也就是说:printf("%d %d\r",P.x,P.y);是不行的,只能printf("%d %d \r",P.x,P.y);
为什么呢?如果原来的坐标是(123,1024); 即输出:123 1024;
假如你移动你的指针到(21,35);那么是输出21 35吗?不是,输出的是21 35024;原因参考\r的用法,自己体会吧;
2.我们需要把鼠标移到某个位置,并单击或双击
首先你需要先知道屏幕的分辨率最大是什么:
int x=GetSystemMetrics(SM_CXSCREEN); int y=GetSystemMetrics(SM_CYSCREEN);
现在(x,y)就是右下角的坐标;
与GetCursorPos相对的,SetCursorPos(x,y)是将鼠标移到屏幕上坐标是(x,y)的位置上。如:SetCursorPos(264,119);
模拟鼠标的点击:
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); //模拟按下鼠标左键 mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); //模拟抬起鼠标左键
但要注意,按下抬起两次中间要给电脑运行提供一个时间,这时需要用到:Sleep()函数;如Sleep(2234)就是程序暂停2234毫秒;
因此写出函数:
void click(){ //模拟了鼠标的单击 mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); Sleep(100); mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); }
那么双击呢?想必可以自己写出来了吧;就是调用两次click();
二、键盘的控制
仅仅依靠鼠标无法写出好的脚本,因此键盘的控制也不能少;
1.监测键盘的按键
比如说你写了这样一个脚本,用来恶搞同学:
int x=GetSystemMetrics(SM_CXSCREEN);
int y=GetSystemMetrics(SM_CYSCREEN);
while(1){ SetCursorPos(rand()%x,rand()%y);
Sleep(200);
}
显然的,恶搞结束后就算是你想停止该程序运行也只能使用键盘win+r运行cmd,通过tasklist和taskkill /pid来结束进程;
那么有没有更好的办法呢?
有!就像侠盗猎车手GTA的秘籍差不多,按下指定的按键组合后停止该程序;
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
上面这句话就是把写起来贼为困难的话变成人话,这个函数的返回值是一个bool值,如果按下了VK_NONAME键,返回1,否则返回0;
因此可以将恶搞的程序修改一下:
int x=GetSystemMetrics(SM_CXSCREEN); int y=GetSystemMetrics(SM_CYSCREEN); while(1){ SetCursorPos(rand()%x,rand()%y); Sleep(200); if(KEY_DOWN(‘M‘)&&KEY_DOWN(‘X‘)&&KEY_DOWN(‘R‘)){ return 0; } }
这样你只需要像真正的大佬一样,随意的按下几个键子,就终止了这个看似恶魔般的程序;
2.模拟键盘的按键
先来看一下这两个函数:
keybd_event(ascii,0,0,0); keybd_event(ascii,0,KEYEVENTF_KEYUP,0);
第一个参数:虚拟键码(键盘键码对照表一会给出);
第二个参数:硬件扫描码,一般设置为0即可;
第三个参数:函数操作的一个标志位,如果值为KEYEVENTF_EXTENDEDKEY则该键被按下,也可设置为0即可,如果值为KEYEVENTF_KEYUP则该按键被抬起;
第四个参数:定义与击键相关的附加的32位值,一般设置为0即可。
其中要格外注意,ascii并不是传统的ASCII码,
原文:https://www.cnblogs.com/kamimxr/p/12572058.html