use SendInput instead of keybd_event for anti afk

This commit is contained in:
2025-04-20 07:07:51 +01:00
parent 914ffe46d2
commit 6079a72f47
+21 -24
View File
@@ -1,8 +1,8 @@
use crate::util::{self, consts::game::WINDOW_TITLE}; use crate::util::{self, consts::game::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, VIRTUAL_KEY, VK_NUMPAD4, VK_NUMPAD6, INPUT, INPUT_KEYBOARD, KEYBD_EVENT_FLAGS, KEYBDINPUT, KEYEVENTF_KEYUP, MAPVK_VK_TO_VSC,
keybd_event, MapVirtualKeyW, SendInput, VIRTUAL_KEY, VK_NUMPAD4, VK_NUMPAD6,
}; };
const INTERVAL: Duration = Duration::from_secs(60); const INTERVAL: Duration = Duration::from_secs(60);
@@ -40,26 +40,23 @@ impl AntiAfk {
} }
fn send(vk_codes: &[VIRTUAL_KEY]) { fn send(vk_codes: &[VIRTUAL_KEY]) {
vk_codes.iter().for_each(|vk_code| unsafe { let mut inputs = Vec::new();
keybd_event( for &vk_code in vk_codes {
vk_code.0 as u8, let scan_code = unsafe { MapVirtualKeyW(u32::from(vk_code.0), MAPVK_VK_TO_VSC) as u16 };
u8::try_from(MapVirtualKeyW( for event in [KEYBD_EVENT_FLAGS(0), KEYEVENTF_KEYUP] {
u32::from(vk_code.0), let mut input = INPUT {
MAP_VIRTUAL_KEY_TYPE(0), r#type: INPUT_KEYBOARD,
)) ..Default::default()
.unwrap(), };
KEYBD_EVENT_FLAGS(0), input.Anonymous.ki = KEYBDINPUT {
0, wVk: vk_code,
); wScan: scan_code,
keybd_event( dwFlags: event,
vk_code.0 as u8, time: 0,
u8::try_from(MapVirtualKeyW( dwExtraInfo: 0,
u32::from(vk_code.0), };
MAP_VIRTUAL_KEY_TYPE(0), inputs.push(input);
)) }
.unwrap(), unsafe { SendInput(&inputs, size_of::<INPUT>() as i32) };
KEYBD_EVENT_FLAGS(2), }
0,
);
});
} }