【问题标题】:Issue with using winapi to get char from scancode使用 winapi 从扫描码获取字符的问题
【发布时间】:2023-03-30 14:38:01
【问题描述】:

我一直在尝试在扫描码和字符之间进行转换。这个系统以前工作过,但到目前为止,不知什么原因已经停止工作。

static mut SCANCODE_BUFFER: winapi::shared::minwindef::PBYTE = std::ptr::null_mut();
static mut layout: winapi::shared::minwindef::HKL = std::ptr::null_mut();

pub fn SCANCODE_TO_CHAR(scancode: u32) -> char {
    unsafe {
        let mut result = [0 as u16; 2];

        if GetKeyboardState(SCANCODE_BUFFER) ==  winapi::shared::minwindef::FALSE {
            return 0 as char;
        } 
        let vk = MapVirtualKeyExA(scancode, 1, layout);
        ToAsciiEx(vk, scancode, SCANCODE_BUFFER, result.as_mut_ptr(), 0, layout);
        result[0] as u8 as char  

    }
} 

pub fn initialize() {
    unsafe { 

        SCANCODE_BUFFER = [0 as u8; 256].as_mut_ptr();
        layout = GetKeyboardLayout(0);

    }
}

我做了一些调试,似乎函数调用: GetKeyboardState(SCANCODE_BUFFER)

导致程序以以下方式结束: (exit code: 0xc0000005, STATUS_ACCESS_VIOLATION)

有人知道如何解决这个问题吗?

额外信息: SCANCODE_BUFFER 绝对不是空指针。

【问题讨论】:

    标签: winapi rust


    【解决方案1】:

    很抱歉发布此信息。 SCANCODE_BUFFER 指向丢弃的内存。过去我一定非常幸运。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 2014-09-19
    • 1970-01-01
    • 2022-01-04
    • 2017-05-17
    • 1970-01-01
    相关资源
    最近更新 更多