首页 > 编程语言 > 详细

c++ 脚本初级介绍

时间:2020-03-26 10:10:16      阅读:55      评论:0      收藏:0      [点我收藏+]

脚本是什么应该就不用多说了吧,想必想写脚本的人一定知道什么是脚本;

众所周知,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码,

 技术分享图片

 

 

   技术分享图片

 

 

 

c++ 脚本初级介绍

原文:https://www.cnblogs.com/kamimxr/p/12572058.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!