一篇关于c的杂文,无意中乱写整理

    xiaoxiao2021-03-25  124

    我们先来说一下,物体的运动,我们高中就知道,物体的运动有如下几种:

    比如物体的速度大小发生变化,方向不变的变加速运动,减速运动,匀加速,匀减速运动。

    比如速度大小不变,方向发生变化,如匀速圆周运动

    还有就是速度的大小与方向都发生变化,如简谐运动,也就是说按照正弦,余弦方式函数运动。

    既然说到了高中物理,我们就俩多说几个公式吧。

    我们来说一下,匀变速直线运动的几个公式:

    Vt=v0+at

    S=v0t+1/2at^2

    Vt^2-v0^2=2as

    S=v0+vt/2*t

    我们记几个上面的公式就可以了。

    然后我们切换几个概念:

    帧数:就是在1秒钟之内传输图片的数目,也可以理解为图形处理器,每秒可以刷新几次,通常用fps表示。每一帧都是静止的图像。高的帧率可以得到更流畅,更加逼真的动画。

    帧率:测量显示帧数的度量,也就是说每秒显示帧数(fps)

    一般来说30fps是可以接受的。但是将帧率提升至60fps就可以有明显的交互感与逼真感。但是超过75fps则没有明显的流畅度了,因为显示太快了。

    3D:120HZ

    液晶显示器:60HZ

    既然就是说,我们要求的是刷新率越快越好,为什么没有必要追求太高的刷新率呢?

    原因就是说,在分辨率不变的情况下,fps越高,则对显卡的处理能力要求也就越高。

    电脑中所显示的画面,都是由显卡进行输出的,因此屏幕上面的每一个像素的填充都是由显卡来进行计算,输出的。

    我们举个例子来说明一下啊,当画面的分辨率是1024*76的时候,画面的刷新率要达到24/秒,,那么显卡在一秒钟需要处理的像素量就达到1024*76*24

    你想一下,如果帧率越高,那么显卡1秒钟处理像素的能力是不是要进行提升呢。所以,我们不适宜设置很大的帧率,只要在合理范围就可以了。显卡处理能力越大,画面肯定就会不流畅。

    一般来说到下一个画面的切换时间帧速率为1/60秒,如果让物体每帧增加3个像素的距离,那么1秒就会移动180个像素的大小。

    好了,抛弃上面不说,下面做一个让一个应用程序从左往右移动,又从右往左移动。我们就俩让qq这个应用程序来移动吧。

    先来说一下,如何看电脑上的坐标图:

    从电脑左上角开始,往下面是y轴,往右面是x轴。还有就是system()这个函数可以向控制台发送指令。

    来说一个cmd命令:

     

    下面我们看一下面这个程序代码:

    #include <stdio.h>

    #include <stdlib.h>

    #include <Windows.h>

     

    //打开qq应用程序

    void openQQ()

    {

    ShellExecuteA(0, "open", "\"C:\\Program Files(x86)\\Thunder Network\\Thunder\\Program\\Thunder.exe\" -StartType:DesktopIcon", 0, 0, 3);

    }

     

    //关闭qq应用程序

    void closeQQ()

    {

    system("taskkill /f /im Thunder.exe");//强制性结束进程

    }

    //模拟移动qq,从左向开始移动

    void leftMoveQQ()

    {

    //一般从左开始移动,设定一个编号为0

    int i = 0;

    //要进行移动,就要先找到这个窗口的编号,也就是窗口句柄

    HWND win1 = FindWindowA("XLUEFrameHostWnd", "迅雷7");//一个是类名,一个是标题

    //对函数返回结果做一个处理

    if (NULL == win1)

    {

    printf("没有找到QQ这个应用窗口\n");

    }

    //下面就是找到了,处理一下程序的位置

    SetWindowPos(win1, NULL, 0, 0, 400, 400, 0);//窗口编号,保留参数,坐标,窗口的长度与宽度

    //根据电脑分辨率不同,来进行设置不同的移动长度

    //我的电脑分辨率是1366*768,加上本身qq就占用了400的长度,所以,我就让它移动966个像素,差不多

    while (i < 966)

    {

    //最开始的i是设置的为0,后来就要移动,按固定长度移动

    SetWindowPos(win1, NULL, i, 0, 400, 400, 0);

    //而且我们移动的中间,缓冲一秒钟,不要移动的太快

    Sleep(1000);//缓冲1

    i += 30;//每次移动30个像素,并且让它移动的过程中若隐若现的移动

    if (i / 10 % 2 == 1)

    {

    //如果十位数是奇数,就让它隐藏

    ShowWindow(win1, SW_HIDE);//让窗口隐藏

    }

    else

    {

    ShowWindow(win1, SW_SHOW);//让窗口显示

    }

    }

    }

     

    //下面我们又要从右向左移动

    void rightMoveQQ()

    {

    //这个时候就要从屏幕最右边开始定位了

    int i = 966;

    HWND win1 = FindWindowA("XLUEFrameHostWnd", "迅雷7");//还是通过类名与标题来找到句柄

    //对函数的返回结果我们必须要判定一下

    if (NULL == win1)

    {

    printf("没有找到QQ这个引用窗口\n");

    }

    //下面我们再来设置初始位置,从最右边开始移动

    SetWindowPos(win1, NULL,966, 0, 400, 400, 0);

    //当位置小于0的时候,就不移动了

    while (i > 0)

    {

    SetWindowPos(win1, NULL, i, 0, 400, 400, 0);

    Sleep(1000);//缓冲1秒钟

    i -= 30;

    }

    }

     

    //上面各项功能差不多就做好了,下面我们就要来写入口函数

    int main()

    {

    closeQQ();//在打开前,我们先关闭之前打开的QQ

    openQQ();//打开QQ

    //在做一个死循环移动qq

    while (1)

    {

    Sleep(3000);

    leftMoveQQ();//从左开始移动qq

    Sleep(3000);

    rightMoveQQ();//从右开始移动QQ

    }

     

    system("pause");

    return 0;

    }

    上面就是移动在屏幕上从左向右,又从右向左移动的一个小程序,下面我们让它沿对角线移动,下面是程序代码:

    #include <stdio.h>

    #include <stdlib.h>

    #include <Windows.h>

     

    //我们还是先打开QQ这个应用程序

    void openQQ()

    {

    //先打开应用程序

    ShellExecuteA(0, "open", "\"C:\\Program Files(x86)\\Tencent\\QQ\\Bin\\QQScLauncher.exe\"", 0, 0, 3);//先来打开这个引用程序

    }

     

    //然后关闭qq这个应用程序

    void closeQQ()

    {

    system("taskkill /f /im QQProtect.exe");

    }

     

    //开始移动

    void moveQQ()

    {

    //要移动一个窗口,我们必须先知道这个窗口的句柄

    int i = 0;

    HWND win1 = FindWindowA("TXGuiFoundation", "QQ");//一个是类名,一个是标题

    //找到了之后,就开始设置一下它的初始位置

    SetWindowPos(win1, NULL, 0, 0, 400, 400, 0);//初始位置,还有长度与宽度

    //这里关于沿对角线移动的一个设置,每个计算机分辨率不一样,自然也就不一样

    //x移动两倍,y移动一倍,注意,引用窗口本身还有400的长度

    while (i < 368)//768-400

    {

    //我们需要来设置一下位置

    SetWindowPos(win1, NULL, 2 * i, i, 400, 400, 0);//每一次的i都是在不断发生变化的

    Sleep(1000);//让这个程序缓冲1秒执行

    i += 10;

    //让窗口一闪一闪的移动

    if ((i / 10 % 2) == 1)

    {

    //这个时候我们就隐藏窗口

    ShowWindow(win1, SW_HIDE);//隐藏

    }

    else

    {

    ShowWindow(win1, SW_SHOW);//显示

    }

    }

    }

     

    int main()

    {

    //把上面函数用起来就可以了

    closeQQ();

    openQQ();

    while (1)

    {

    Sleep(2000);//缓冲两秒钟执行

    moveQQ();//移动qq

    }

    system("pause");

    return 0;

    }

    下面我们做一个植物大战僵尸自动加血外挂:

    首先,我们需要在电脑上面下载这款单机游戏,然后运行:

    然后打开vs2013开发工具:

    我们这里的目标是,当太阳数小于100的时候,自动回升到200

    其实也就是写一个dll,然后载入到程序里面去。

    把原来的exe项目改成dll应用程序就可以了。

     

    其实原理就是找到这个代表太阳数的变量,然后通过指针来做修改

    我们必须通过一款软件找到这个变量的地址:

    比如CE软件:

    很明显我们已经到了这个太阳的地址。

    #include <Windows.h>

     

    _declspec(dllexport) void change()

    {

    int *p = (int *)1FD87590;

    while (1)

    {

    if (*p < 100)

    {

    *p = 200;

    }

    Sleep(2000);//每两秒就检查一次

    }

    }

    上面就是目标代码

    下面我们通过项目-》属性->把配置类型变成dll文件。

    下面我们又要通过一款软件把这个dll注入进去。注意要重新生成一下解决方案。注意在生成解决方案之前,就要把项目变成dll文件,然后生成解决方案,不然不会成功。

    上面找到dll注入就可以了。

    转载请注明原文地址: https://ju.6miu.com/read-16846.html

    最新回复(0)