Added keyboard hooking

This commit is contained in:
Ido Veltzman
2022-10-31 17:56:26 +02:00
parent f06351d6ca
commit c8dd3c714c
2 changed files with 67 additions and 0 deletions
+14
View File
@@ -0,0 +1,14 @@
[package]
name = "keyboard_hooking"
version = "0.1.0"
authors = ["Idov31 <github.com/idov31>"]
edition = "2021"
[[bin]]
name = "keyboard_hooking"
path = "src/main.rs"
[dependencies]
windows = {version = "0.43.0", features = [
"Win32_Foundation",
"Win32_UI_WindowsAndMessaging"]}
+53
View File
@@ -0,0 +1,53 @@
use std::ptr::null_mut;
use windows::Win32::{
UI::{
WindowsAndMessaging::{
SetWindowsHookExW,
UnhookWindowsHookEx,
GetMessageW,
CallNextHookEx,
HHOOK,
KBDLLHOOKSTRUCT,
WM_KEYDOWN,
WH_KEYBOARD_LL
}
},
Foundation::{
LRESULT,
LPARAM,
WPARAM,
HINSTANCE,
HWND
}
};
static mut HOOK_ID: HHOOK = HHOOK(0);
fn main() {
unsafe {
match SetWindowsHookExW(WH_KEYBOARD_LL, Some(hook_keyboard), HINSTANCE(0), 0) {
Ok(hook_id) => {
HOOK_ID = hook_id;
while GetMessageW(null_mut(), HWND(0), 0, 0).as_bool() {
// Do some stuff here.
}
UnhookWindowsHookEx(hook_id);
}
Err(err) => {
eprintln!("Failed to SetWindowsHookEx: {}", err);
}
}
}
}
unsafe extern "system" fn hook_keyboard(code: i32, wparam: WPARAM, lparam: LPARAM) -> LRESULT {
if wparam.0 as u32 == WM_KEYDOWN {
let info: *mut KBDLLHOOKSTRUCT = std::mem::transmute(lparam);
let char_written = char::from_u32((*info).vkCode).unwrap();
println!("Character written: {}", char_written);
}
return CallNextHookEx(HOOK_ID, code, wparam, lparam);
}