安装包
在 Caogo.toml 中,添加 winreg 包(操作注册表),用rust实现纯属小小练习。
cmd 进入项目中,cargo build 安装,如果想查看 winreg 的 API 和使用介绍,cmd 进入项目中 cargo doc 即可生成本地的所有你用到的库的文档。
使用
代码内容很简单,直接贴上了。
extern crate winreg;
use winreg::enums::HKEY_CLASSES_ROOT;
use winreg::{RegKey, RegValue};
use winreg::enums::*;
use std::io;
// 添加注册表
fn start_add() -> io::Result<()> {
println!("\nStarting reading windows reg...");
let my_key = RegKey::predef(HKEY_CLASSES_ROOT);
let (my_key, disposition) = my_key.create_subkey("Directory\\Background\\shell\\runas")?;
match disposition {
REG_CREATED_NEW_KEY => println!("==step 1 runas created, succeed."),
REG_OPENED_EXISTING_KEY => println!("==runas already exist, skip 1")
}
my_key.set_value("", &"Open Cmd Here")?;
// 0x639bc8 Vec中倒序存入
let keys: Vec<u8> = vec![200, 155, 99, 0];
let data = RegValue {vtype: REG_DWORD, bytes: keys};
my_key.set_raw_value("ShowBasedOnVelocityId", &data)?;
let (my_key, disposition) = my_key.create_subkey("command")?;
match disposition {
REG_CREATED_NEW_KEY => println!("==step 2 runas-command created, succeed."),
REG_OPENED_EXISTING_KEY => println!("==runas-command already exist, skip 2")
}
my_key.set_value("", &"cmd.exe /s /k pushd \"%V\"")?;
Ok(())
}
// 删除注册表
fn delete_it() -> io::Result<()> {
RegKey::predef(HKEY_CLASSES_ROOT)
.delete_subkey_all("Directory\\Background\\shell\\runas")?;
Ok(())
}
fn main() {
println!("\nInput 1 to add, 2 to delete, other noting done.");
let mut input = String::new();
io::stdin().read_line(&mut input)
.expect("Read input failed.");
let input : u32 = input.trim().parse()
.expect("Please input a num.");
if input == 1 {
let result = start_add();
match result {
Ok(()) => println!("\nADD FUNCTION END."),
Err(error) => {
panic!("ADD FAILED : {:?}", error)
}
}
}
else if input == 2 {
let result = delete_it();
match result {
Ok(()) => println!("\nDELETE FUNCTION END."),
Err(error) => {
match error.kind() {
// 如果要删除的键,不存在。
io::ErrorKind::NotFound => println!("no purpose exist, no need to delete."),
_ => panic!("DELETE FAILED : {:?}", error)
}
}
}
}
else {
println!("Nothing to do.");
}
}
结果
添加前:
运行程序(需要管理员运行):
添加后: