Das habe ich bereits ausprobiert: So simulieren Sie das Gedrückthalten einer Taste in C++, , und jede Menge Chatgpting.
Ich habe das geschrieben Rost ursprünglich.
Code: Select all
let mut keybd_flags = KEYEVENTF_SCANCODE;
let mut inserted_events = 0;
let mut expected_events = 1;
let mut input: INPUT = std::mem::zeroed();
let mut kbd_input: KEYBDINPUT = std::mem::zeroed();
kbd_input.wScan = scan_code as u16;
kbd_input.dwFlags = keybd_flags;
input.type_ = INPUT_KEYBOARD;
*input.u.ki_mut() = kbd_input;
let new_events = SendInput(1, std::ptr::addr_of_mut!(input), INPUT_SIZE);
inserted_events += new_events;
if inserted_events != expected_events {
return Err(Error::InputError(inserted_events as i32));
}
std::thread::sleep(std::time::Duration::from_millis(1));
Code: Select all
unsafe { key_down("a").unwrap() }
sleep(3.0);
unsafe { key_up("a").unwrap() }
Da bin ich auf Folgendes gestoßen:
Code: Select all
WCHAR key = 'a';
key = VkKeyScanW(key);
UINT mappedKey = MapVirtualKeyW(LOBYTE(key), NULL);
INPUT input = { 0 };
input.type = INPUT_KEYBOARD;
input.ki.dwFlags = KEYEVENTF_SCANCODE;
input.ki.wScan = mappedKey;
SendInput(1, &input, sizeof(input));
Sleep(2000);
input.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
SendInput(1, &input, sizeof(input));
Für den Kontext versuche ich es um die Funktionalität von pydirectinput nach Rust zu kopieren, was dieser Funktionalität folgt. Dennoch funktioniert keyDown auf pydirectinput wie beabsichtigt.
Also ich bin ein wenig verloren, aber gehen Sie vorsichtig mit mir um, ich bin völlig neu in der Verwendung der WinAPI und Zum größten Teil habe ich Code und alles, was ich von Google lernen kann, durchforstet.