1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
use std::mem::MaybeUninit as MU; use windows::Win32::System::Console::{ GetConsoleScreenBufferInfo, GetStdHandle, CONSOLE_SCREEN_BUFFER_INFO as winsize, SMALL_RECT as rect, STD_OUTPUT_HANDLE, }; pub fn size() -> Option<(u16, u16)> { // SAFETY: SYS unsafe { let mut info = MU::uninit(); GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE).ok()?, info.as_mut_ptr()) .ok()?; let winsize { srWindow: rect { Top, Left, Right, Bottom, }, .. } = info.assume_init(); Some(((Bottom - Top - 1) as u16, (Right - Left - 1) as u16)) } }