C# Открыть форму и запустить fuction одновременно
Я пытаюсь написать код памяти для игры, но я хочу создать меню, поэтому я решил сделать это. И теперь я хочу, чтобы моя программа открывала форму и одновременно выполняла мошенничество. Потому что теперь чит делает это, иначе чит не работает, а форма открывается. Я довольно новичок в 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);
}
}
}
}
}
3 ответа
Вы можете одновременно показать форму и запустить чит-цикл следующим образом:
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)
{
//...
}
}
Проблема с вашим кодом в том, что конструктор никогда не завершается, поэтому форма не может быть отображена.
Удалить звонок Main
от вашего конструктора и вместо этого поместите его в обработчик событий Timer. Поскольку таймер будет обрабатывать повторение для вас, вы можете удалить while
петля тоже.
Приложения Windows Form начинаются как однопоточные, поэтому вы не можете делать две вещи одновременно.
Типичный способ справиться с этим - запустить рабочий поток, например, используя 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());
}
}