use windows::Win32::UI::Input::KeyboardAndMouse::*;
use windows::Win32::Foundation::*;
use windows::Win32::UI::WindowsAndMessaging::{GetSystemMetrics, SM_CXSCREEN, SM_CYSCREEN};
use std::time::Duration;
use std::thread::sleep;
fn main() {
// 目标坐标(例如,点击屏幕上的坐标 x=500, y=300)
let x = 500;
let y = 300;
unsafe {
// 设置鼠标位置
let mut input = INPUT {
r#type: INPUT_MOUSE,
Anonymous: INPUT_0 {
mi: MOUSEINPUT {
dx: (x * 65536 / GetSystemMetrics(SM_CXSCREEN)) as i32,
dy: (y * 65536 / GetSystemMetrics(SM_CYSCREEN)) as i32,
mouseData: 0,
dwFlags: MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE,
time: 0,
dwExtraInfo: 0,
},
},
};
if SendInput(&[input], std::mem::size_of::<INPUT>() as i32) == 0 {
println!("Failed to move the mouse: {:?}", GetLastError());
}
// 模拟鼠标左键按下
input.Anonymous.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
if SendInput(&[input], std::mem::size_of::<INPUT>() as i32) == 0 {
println!("Failed to send mouse left button down: {:?}", GetLastError());
}
sleep(Duration::from_millis(100)); // 等待 100 毫秒
// 模拟鼠标左键松开
input.Anonymous.mi.dwFlags = MOUSEEVENTF_LEFTUP;
if SendInput(&[input], std::mem::size_of::<INPUT>() as i32) == 0 {
println!("Failed to send mouse left button up: {:?}", GetLastError());
}
}
}
[dependencies]
windows-sys="0.59.0"
#winapi = { version = "0.3.8", features = ["winuser","libloaderapi"] }
[dependencies.windows]
version = "0.58.0"
features = [
"Win32_Foundation",
"Win32_UI_WindowsAndMessaging",
"Win32_UI_Input_KeyboardAndMouse",
"Win32_Security",
"Win32_System_Diagnostics",
"Win32_System_Threading",
"Win32_Graphics_Gdi",
"Win32_System_LibraryLoader",
"Win32_UI_WindowsAndMessaging",
"Win32_System_Diagnostics_Debug",
]