rust - 读取windows注册表的值

本文提供了读取windows注册表值的方法。

读取字符串的值

rust 复制代码
#![cfg(windows)]
use anyhow::Result;
use windows::{core::*, Win32::System::Registry::*};

/// 查询windows注册表的值
fn query_reg_value() -> Result<String> {
    unsafe {
        // 打开注册表
        let mut key = HKEY::default();
        RegOpenKeyExA(
            HKEY_LOCAL_MACHINE,
            s!(r"SOFTWARE\GitForWindows"),
            0,
            KEY_QUERY_VALUE,
            &mut key,
        )?;

        // 获得 value 的字节数
        let mut len = 0;
        RegQueryValueExA(
            key,
            s!("InstallPath"),
            None,
            None,
            None,
            Some(&mut len),
        )?;

        // 获取 value 的值
        let mut buffer = vec![0u8; (len) as usize];
        RegQueryValueExA(
            key,
            s!("InstallPath"),
            None,
            None,
            Some(buffer.as_mut_ptr() as _),
            Some(&mut len),
        )?;

        // 转换为字符串
        let value = String::from_utf8_lossy(&buffer);

        // 去掉结尾的空字符
        let value = value.trim_end_matches("\0");

        Ok(value.to_string())
    }
}

#[test]
fn test_query_reg_value() {
    let actual = query_reg_value().unwrap();
    let expect = r"C:\Program Files\Git".to_string();
    assert_eq!(actual, expect);
}
相关推荐
浩浩测试一下1 天前
汇编 16位32位64位通用寄存器(逆向分析)
汇编·windows·stm32·单片机·嵌入式硬件·逆向·二进制
qq_369224331 天前
Windows系统缺失ddraw.dll文件?游戏闪退、图形报错原因详解及处理办法
windows·游戏·dll·dll修复·dll丢失·dll错误
林下溪畔1 天前
部署claude code(Windows版)
windows
J&A~ing1 天前
第一章 opencv 的 Windows源码在 Visual Studio 下的编译安装
人工智能·windows·opencv·计算机视觉·visual studio
2501_939998201 天前
【2026.5.19 更新】 Win11 25H2 26200.8521 镜像下载
windows
ni_darling1 天前
win11任务栏居左,win11右键菜单栏设置,win11改回win10设置项
windows
迷渡1 天前
用 Rust 重写的 Bun 有 13365 个 unsafe!
开发语言·后端·rust
玖釉-1 天前
旋转图像:从矩阵转置、镜像到坐标变换的系统理解
c++·windows·算法·图形渲染
家有两宝,感恩遇见1 天前
windows安装claude code
windows
咸甜适中1 天前
rust语言学习笔记Trait(九)PartialEq、 Eq(相等比较)
笔记·学习·rust