3个版本 (重大更新)
0.2.0 | 2023年3月20日 |
---|---|
0.1.0 | 2022年12月20日 |
0.0.0 | 2022年12月10日 |
#125 in Windows API
每月32次下载
在 cargo-nw 中使用
47KB
933 行
winres-edit
用于修改Windows资源的Crate。
概述
此Crate允许您在.exe和.res文件中创建、加载和修改Windows资源。此Crate目前不支持除版本字符串(VS_VERSION_INFO)之外的资源数据的实际解构,这对于修改应用程序清单非常有用。加载的资源以原始的Vec
请注意,在打开的资源文件上执行的所有操作都会累积,并在关闭文件时使用close()函数“刷新”到文件中。这是由于此Crate使用的底层Win32 API(UpdateResource)的功能行为。
示例
修改图标数据和资源字符串
let mut resources = Resources::new(&Path::new("myfile.exe"));
resources.load().expect("Unable to load resources");
resources.open().expect("Unable to open resource file for updates");
resources.find(resource_type::ICON,Id::Integer(1))
.expect("unable to find main icon")
.replace(icon_data)?
.update()?;
let version: [u16;4] = [0,1,0,0];
resources.get_version_info()?.expect("Unable to get version info")
.set_file_version(&version)
.set_product_version(&version)
.insert_strings(
&[
("ProductName","My Product")
("FileDescription","My File")
]
)
.remove_string("SomeExistingString")
.update()?;
// make sure to explicitly call close() as that flushes all the session changes
resources.close();
添加新图标
let res = Resource::new(
&resources,
resource_type::ICON.into(),
Id::Integer(14).into(),
1033,
target_icon.data(),
);
res.update()?;
图标
此Crate与ico
crate协同工作良好,该crate可以用来加载/存储外部的.ico文件,以及加载.png文件并将它们编码成Windows兼容的资源格式。
示例
let iconfile = std::fs::File::open("myicon.ico").unwrap();
let icon_dir = ico::IconDir::read(iconfile).unwrap();
let target_icon = icon_dir
.entries()
.iter()
.find(|&e| e.width() == 256)
.expect("can't find 256x256 icon");
let icon_data = target_icon.data();
此Crate还与image
crate协同工作良好,该crate可以与ico crate交互,在资源文件中加载、调整大小和存储自定义图标。
依赖关系
~131MB
~2M SLoC