nJammi Опубликовано 1 ноября, 2021 Поделиться Опубликовано 1 ноября, 2021 Добрый день, мало-помалу разбираюсь в чтении значений из игры. Есть несколько нубских вопросов, надюсь можно их тут задавать. Хотел узнать: постоянное слежение за значением в игре делается через циклы или как нибудь еще можно реализовать в C#. И еще есть кусочек кода: public static int ReadBytes(long baseAdress, ushort[] offsets) { if (pID != 0 && offsets.Length != 0) { byte[] buffer = new byte[5]; var bytesread = new UIntPtr(); var handle = OpenProcess(0x001F0FFF, false, pID); ReadProcessMemory(handle, (IntPtr)baseAdress, buffer, 5, out bytesread); for (int i = 0; i < offsets.Length; i++) { baseAdress = BitConverter.ToUInt32(buffer, 0); baseAdress += offsets[i]; ReadProcessMemory(handle, (IntPtr)baseAdress, buffer, 5, out bytesread); } var result = buffer; CloseHandle(handle); return BitConverter.ToInt32(buffer, 0); } return 0; } который считывает значение, если его задействовать в цикле то он постоянно будет отрывать и закрывать процесс. Это так и делается или открывать в начале цикла и закрывать уже перед закрытием проги? Благодарю. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 1 ноября, 2021 Поделиться Опубликовано 1 ноября, 2021 8 часов назад, nJammi сказал: постоянное слежение за значением в игре делается через циклы или как нибудь еще можно реализовать в C# Через циклы, ага. А можно и каким-нибудь фоновым воркером асинхронно это делать. Но это пока не твой уровень, раз у тебя возникают такие вопросы. В будущем обязательно разберешься ) 8 часов назад, nJammi сказал: если его задействовать в цикле то он постоянно будет отрывать и закрывать процесс. Это так и делается или открывать в начале цикла и закрывать уже перед закрытием проги Ты можешь открыть процесс перед стартом цикла и закрыть его по завершении цикла. А можешь открыть процесс при старте твоего трейнера, а закрыть перед выходом из трейнера - на твое усмотрение. Думаю, второй вариант будет предпочтительнее, если ты собираешься делать больше одного цикла (то есть, мониторить/морозить больше одного значения) Ссылка на комментарий Поделиться на другие сайты Поделиться
nJammi Опубликовано 3 ноября, 2021 Автор Поделиться Опубликовано 3 ноября, 2021 Еще раз здравствуйте. Можно ли отправлять нажатие клавиш в конкретное приложение в фоновом режиме на c#? Слизал таки код для работы в ассинхронном режиме, если кто любит поучать как правильно писать код то можете глянуть ошибки оформления(или как правильно)? Так он рабочий. Спойлер public partial class Form1 : Form { public string process; Mem mem = new(); public uint MaxHp; public uint Hp; public uint MaxMp; public uint Mp; public uint HoldMp; public uint CurrMp; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void BgWorker_DoWork(object sender, DoWorkEventArgs e) { while (true) { if (ProccessNameLabel.Text != "") { process = ProccessNameLabel.Text; } else { Thread.Sleep(1000); return; } if (!mem.OpenProcess(process)) { Thread.Sleep(1000); return; } MaxHp = GetVal("base+0x024323C8,0x298,0x80,0x278"); Hp = GetVal("base+0x024323C8,0x298,0x80,0x280"); MaxMp = GetVal("base+0x024323C8,0x2A0,0x80,0x278"); Mp = GetVal("base+0x024323C8,0x2A0,0x80,0x280"); HoldMp = GetVal("base+0x024323C8,0x2A0,0x80,0x298"); CurrMp = MaxMp - HoldMp; if (Hp !<= 0 && Hp <= MaxHp*49/100) SendKeys.SendWait("1"); if (Mp !<= 0 && CurrMp < 45) SendKeys.SendWait("2"); Thread.Sleep(100); BgWorker.ReportProgress(0); } } private void Form1_Shown(object sender, EventArgs e) { BgWorker.RunWorkerAsync(); } private void BgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { ProcOpenLabel.Text = "Game Found"; MaxHpLabel.Text = MaxHp.ToString(); HpLabel.Text = Hp.ToString(); MaxMpLabel.Text = MaxMp.ToString(); MpLabel.Text = Mp.ToString(); HoldMpLabel.Text = HoldMp.ToString(); } private void BgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { BgWorker.RunWorkerAsync(); } public uint GetVal(string address) { return mem.ReadUInt(address); } } Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения