improve anti afk with added checks and different keys

This commit is contained in:
2025-04-09 16:34:30 +01:00
parent 1aebc6b17c
commit 4bb0f151a9
4 changed files with 60 additions and 10 deletions
+16 -5
View File
@@ -1,10 +1,12 @@
use crate::util::{self, consts::GTA_WINDOW_TITLE};
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
use windows::Win32::UI::Input::KeyboardAndMouse::{ use windows::Win32::UI::Input::KeyboardAndMouse::{
KEYBD_EVENT_FLAGS, MAP_VIRTUAL_KEY_TYPE, MapVirtualKeyW, keybd_event, KEYBD_EVENT_FLAGS, MAP_VIRTUAL_KEY_TYPE, MapVirtualKeyW, keybd_event,
}; };
pub const INTERVAL: Duration = Duration::from_secs(60); pub const INTERVAL: Duration = Duration::from_secs(60);
const VK_SHIFT: u8 = 16; const VK_NUMPAD4: u8 = 0x64;
const VK_NUMPAD6: u8 = 0x66;
#[derive(Debug)] #[derive(Debug)]
pub struct AntiAfk { pub struct AntiAfk {
@@ -21,6 +23,19 @@ impl Default for AntiAfk {
} }
} }
impl AntiAfk {
pub fn activate(&mut self) {
if util::is_window_focused(GTA_WINDOW_TITLE)
&& !util::is_key_pressed(VK_NUMPAD4 as i32)
&& !util::is_key_pressed(VK_NUMPAD6 as i32)
{
send(VK_NUMPAD4);
send(VK_NUMPAD6);
}
self.interval = Instant::now();
}
}
pub fn send(vk_code: u8) { pub fn send(vk_code: u8) {
unsafe { unsafe {
keybd_event( keybd_event(
@@ -37,7 +52,3 @@ pub fn send(vk_code: u8) {
); );
} }
} }
pub fn activate() {
send(VK_SHIFT);
}
+21 -3
View File
@@ -7,7 +7,8 @@ use crate::{
launch::{Launch, Platform}, launch::{Launch, Platform},
}, },
util::{ util::{
consts::{ENHANCED, LEGACY}, self,
consts::{ENHANCED, GTA_WINDOW_TITLE, LEGACY},
elevation, elevation,
}, },
}; };
@@ -235,12 +236,23 @@ impl App {
ui.label(&self.empty_session.countdown.i_string); ui.label(&self.empty_session.countdown.i_string);
}); });
}); });
ui.horizontal(|ui| {
ui.checkbox(&mut self.anti_afk.enabled, "Anti AFK") ui.checkbox(&mut self.anti_afk.enabled, "Anti AFK")
.on_hover_text("You should be tabbed in\nfor this to work."); .on_hover_text("You should be tabbed in\nfor this to work.");
if self.anti_afk.enabled {
ui.add_space(8.0);
ui.add_enabled_ui(false, |ui| {
ui.label(if util::is_window_focused(GTA_WINDOW_TITLE) {
"GTA is focused."
} else {
"GTA is not focused!"
})
});
}
});
if self.anti_afk.enabled && self.anti_afk.interval.elapsed() >= features::anti_afk::INTERVAL if self.anti_afk.enabled && self.anti_afk.interval.elapsed() >= features::anti_afk::INTERVAL
{ {
features::anti_afk::activate(); self.anti_afk.activate();
self.anti_afk.interval = Instant::now();
} }
} }
@@ -297,6 +309,12 @@ impl App {
} }
fn show_debug(&mut self, _ctx: &egui::Context, ui: &mut egui::Ui) { fn show_debug(&mut self, _ctx: &egui::Context, ui: &mut egui::Ui) {
ui.collapsing("times", |ui| {
ui.label(format!(
"anti afk timer: {}",
self.anti_afk.interval.elapsed().as_secs()
))
});
ui.collapsing("sysinfo", |ui| { ui.collapsing("sysinfo", |ui| {
if ui.button("refresh all").clicked() { if ui.button("refresh all").clicked() {
self.sysinfo.refresh_all(); self.sysinfo.refresh_all();
+2
View File
@@ -1,2 +1,4 @@
pub const ENHANCED: &str = "GTA5_Enhanced.exe"; pub const ENHANCED: &str = "GTA5_Enhanced.exe";
pub const LEGACY: &str = "GTA5.exe"; pub const LEGACY: &str = "GTA5.exe";
pub const GTA_WINDOW_TITLE: &str = "Grand Theft Auto V";
+19
View File
@@ -1,3 +1,22 @@
pub mod consts; pub mod consts;
pub mod countdown; pub mod countdown;
pub mod elevation; pub mod elevation;
use windows::Win32::UI::{
Input::KeyboardAndMouse::GetAsyncKeyState,
WindowsAndMessaging::{GetForegroundWindow, GetWindowTextW},
};
pub fn is_window_focused(target_title: &str) -> bool {
unsafe {
let hwnd = GetForegroundWindow();
let mut buffer: [u16; 512] = [0; 512];
let length = GetWindowTextW(hwnd, &mut buffer);
let current_title = String::from_utf16_lossy(&buffer[..length as usize]);
current_title == target_title
}
}
pub fn is_key_pressed(key: i32) -> bool {
unsafe { (GetAsyncKeyState(key) as i32 & 0x8000) != 0 }
}