windows, fix display name comparation
Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
parent
b8ea705a21
commit
ac96ddaecb
@ -1890,6 +1890,17 @@ pub fn current_resolution(name: &str) -> ResultType<Resolution> {
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn is_device_name(device_name: &str, name: &str) -> bool {
|
||||
if name.len() == device_name.len() {
|
||||
name == device_name
|
||||
} else if name.len() > device_name.len() {
|
||||
false
|
||||
} else {
|
||||
&device_name[..name.len()] == name && device_name.as_bytes()[name.len() as usize] == 0
|
||||
}
|
||||
}
|
||||
|
||||
pub fn is_virtual_display(name: &str) -> ResultType<bool> {
|
||||
let mut dd: DISPLAY_DEVICEW = unsafe { std::mem::zeroed() };
|
||||
dd.cb = std::mem::size_of::<DISPLAY_DEVICEW>() as DWORD;
|
||||
@ -1900,7 +1911,7 @@ pub fn is_virtual_display(name: &str) -> ResultType<bool> {
|
||||
break;
|
||||
}
|
||||
if let Ok(device_name) = String::from_utf16(&dd.DeviceName) {
|
||||
if device_name == name {
|
||||
if is_device_name(&device_name, name) {
|
||||
return match std::string::String::from_utf16(&dd.DeviceString) {
|
||||
Ok(s) => Ok(&s[..IDD_DEVICE_STRING.len()] == IDD_DEVICE_STRING),
|
||||
Err(e) => bail!("convert the device string of '{}' to string: {}", name, e),
|
||||
|
Loading…
x
Reference in New Issue
Block a user