#winapi #abstraction #crossterm #windows #screen-buffer

crossterm_winapi

提供围绕常见 WinAPI 调用的基本简单抽象的 WinAPI 包装器

19 个版本

0.9.1 2023 年 6 月 12 日
0.9.0 2021 年 10 月 19 日
0.8.1 2021 年 10 月 11 日
0.8.0 2021 年 5 月 6 日
0.1.1 2019 年 1 月 27 日

149Rust 模式

Download history 140291/week @ 2024-03-14 147726/week @ 2024-03-21 155979/week @ 2024-03-28 148752/week @ 2024-04-04 151908/week @ 2024-04-11 155096/week @ 2024-04-18 121637/week @ 2024-04-25 119712/week @ 2024-05-02 126001/week @ 2024-05-09 142472/week @ 2024-05-16 126510/week @ 2024-05-23 131952/week @ 2024-05-30 137210/week @ 2024-06-06 144090/week @ 2024-06-13 143746/week @ 2024-06-20 116729/week @ 2024-06-27

567,103 每月下载量
用于 1,787 个crate (9 直接)

MIT 许可证

51KB
849

Lines of Code Latest Version MIT docs

Crossterm Windows API 抽象

此crate提供了一些常见WinAPI函数的包装器。

此库的原始目的是为了crossterm,但也可以独立使用。不过请注意,它不稳定,因为API的一些更改是可以预期的。

功能

此crate提供了一些关于读取输入、控制台屏幕缓冲区和处理的抽象。

以下 WinAPI 调用

  • CONSOLE_SCREEN_BUFFER_INFO(用于提取如光标位置、终端大小等信息)
  • CONSOLE_FONT_INFO(用于提取如大小等字体信息)
  • HANDLE(运行 WinAPI 函数所需的句柄)
  • SetConsoleActiveScreenBuffer(激活其他屏幕缓冲区)
  • Set/GetConsoleMode(例如,禁用输出的控制台模式)
  • SetConsoleTextAttribute(例如,着色)
  • SetConsoleWindowInfo(更改缓冲区位置,例如滚动)
  • FillConsoleOutputAttribute, FillConsoleOutputCharacter(用于用颜色或字符替换某些单元格块)
  • SetConsoleInfo
  • ReadConsoleW
  • 信号量对象处理

示例

示例存储库中有更多完整和详细的示例。

屏幕缓冲区信息

use crossterm_winapi::{ScreenBuffer, Handle};

fn print_screen_buffer_information() {
    let screen_buffer = ScreenBuffer::current().unwrap();

    // get console screen buffer information
    let csbi = screen_buffer.info().unwrap();

    println!("cursor post: {:?}", csbi.cursor_pos());
    println!("attributes: {:?}", csbi.attributes());
    println!("terminal window dimentions {:?}", csbi.terminal_window());
    println!("terminal size {:?}", csbi.terminal_size());
}

句柄

use crossterm_winapi::{HandleType, Handle};

fn get_different_handle_types() {
    let out_put_handle = Handle::new(HandleType::OutputHandle).unwrap();
    let out_put_handle = Handle::new(HandleType::InputHandle).unwrap();
    let curr_out_put_handle = Handle::new(HandleType::CurrentOutputHandle).unwrap();
    let curr_out_put_handle = Handle::new(HandleType::CurrentInputHandle).unwrap();
}

依赖项

~175KB