0

我正在尝试为游戏编写内存作弊代码,但我想创建一个菜单,所以我决定制作它。现在我希望我的程序同时打开表单并进行作弊。因为现在作弊正在这样做,否则作弊不起作用并且表格正在打开。我是 C# 的新手,如果我是菜鸟,我很抱歉......:P

谢谢,伊兹米歇尔

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Threading;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ac_client_cheat
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Main();
        }

        public static int Pbase = 0x00509B74;
        public static int Health = 0xf8;
        public static int mgammo = 0x150;
        public static int fly = 0x44;
        public void Main()
        {
            VAMemory vam = new VAMemory("ac_client");
            int localplayer = vam.ReadInt32((IntPtr)Pbase);
            {
                while (true)
                {
                   int address = localplayer + fly;
                    float aimlock = vam.ReadFloat((IntPtr)address);
                    vam.WriteFloat((IntPtr)address, -5);

                    address = localplayer + Health;
                    vam.WriteInt32((IntPtr)address, 1337);

                    address = localplayer + mgammo;
                    vam.WriteInt32((IntPtr)address, +1337);
                }
            }
        }
    }
}
4

3 回答 3

0

Windows 窗体应用程序一开始是单线程的,因此您不能同时做两件事。

处理这个问题的典型方法是启动一个工作线程,例如使用Task.Run.

但是,由于您的应用程序非常简单,我们可以使用 Application.DoEvents代替。

当您调用 时DoEvents,您的线程将检查表单的消息循环并处理任何未决事件,例如菜单点击或你有什么。如果没有未决事件,它将让您的主循环恢复。这个方案让你可以在同一个线程上运行表单和循环。

while (true)
{
    int address = localplayer + fly;
    float aimlock = vam.ReadFloat((IntPtr)address);
    vam.WriteFloat((IntPtr)address, -5);

    address = localplayer + Health;
    vam.WriteInt32((IntPtr)address, 1337);

    address = localplayer + mgammo;
    vam.WriteInt32((IntPtr)address, +1337);

    Application.DoEvents();  //Yield control to the message loop
}

此外,请确保您使用Application.Run. 有关更多信息,请参阅此答案。这是一种方法:

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}
于 2017-02-12T09:43:46.137 回答
0

您的代码的问题是构造函数永远不会退出,因此表单永远不会显示。

从您的构造函数中删除对的调用Main并将其放在Timer事件处理程序中。由于计时器将为您处理重复,因此您也可以删除while循环。

于 2017-02-12T10:47:04.397 回答
0

您可以显示表单并同时运行作弊循环,如下所示:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    public static int Pbase = 0x00509B74;
    public static int Health = 0xf8;
    public static int mgammo = 0x150;
    public static int fly = 0x44;

    /// <summary>The main entry point for the application.</summary>
    static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        var f = new Form1();
        f.Show();

        VAMemory vam = new VAMemory("ac_client");
        int localplayer = vam.ReadInt32((IntPtr)Pbase);

        while (f.Visible) //loop while form is not closed
        {
            int address = localplayer + fly;
            float aimlock = vam.ReadFloat((IntPtr)address);
            vam.WriteFloat((IntPtr)address, -5);

            address = localplayer + Health;
            vam.WriteInt32((IntPtr)address, 1337);

            address = localplayer + mgammo;
            vam.WriteInt32((IntPtr)address, +1337);

            Application.DoEvents();  //Yield control to the message loop
        }

    }

    private void Form1_Load(object sender, EventArgs e)
    {
        //...
    }
}
于 2017-02-12T10:48:05.730 回答