The uiatomation-rs
crate is a wrapper for windows uiautomation. This crate can help you make windows uiautoamtion API calls conveniently.
Start by adding the dependency of this crate to your Cargo.toml file. Make use of any windows uiautomation calls as needed.
``` rust use uiautomation::Result; use uiautomation::UIAutomation; use uiautomation::UIElement; use uiautomation::UITreeWalker;
fn main() { let automation = UIAutomation::new().unwrap(); let walker = automation.getcontrolviewwalker().unwrap(); let root = automation.getroot_element().unwrap();
print_element(&walker, &root, 0).unwrap();
}
fn printelement(walker: &UITreeWalker, element: &UIElement, level: usize) -> Result<()> { for _ in 0..level { print!(" ") } println!("{} - {}", element.getclassname()?, element.get_name()?);
if let Ok(child) = walker.get_first_child(&element) {
print_element(walker, &child, level + 1)?;
let mut next = child;
while let Ok(sibling) = walker.get_next_sibling(&next) {
print_element(walker, &sibling, level + 1)?;
next = sibling;
}
}
Ok(())
} ```
``` rust use uiautomation::core::UIAutomation; use uiautomation::processes::Process;
fn main() { Process::create("notepad.exe").unwrap();
let automation = UIAutomation::new().unwrap();
let root = automation.get_root_element().unwrap();
let matcher = automation.create_matcher().from(root).timeout(10000).classname("Notepad");
if let Ok(notepad) = matcher.find_first() {
println!("Found: {} - {}", notepad.get_name().unwrap(), notepad.get_classname().unwrap());
notepad.send_keys("Hello,Rust UIAutomation!{enter}", 10).unwrap();
let window: WindowControl = notepad.try_into().unwrap();
window.maximize().unwrap();
}
} ```
``` rust use uiautomation::UIAutomation; use uiautomation::variants::Variant; use windows::Win32::UI::Accessibility::UIAControlTypePropertyId; use windows::Win32::UI::Accessibility::UIAIsEnabledPropertyId; use windows::Win32::UI::Accessibility::UIA_NamePropertyId;
fn main() { let automation = UIAutomation::new().unwrap(); let root = automation.getrootelement().unwrap();
let name: Variant = root.get_property_value(UIA_NamePropertyId).unwrap();
println!("name = {}", name.get_string().unwrap());
let ctrl_type: Variant = root.get_property_value(UIA_ControlTypePropertyId).unwrap();
let ctrl_type_id: i32 = ctrl_type.try_into().unwrap();
println!("control type = {}", ctrl_type_id);
let enabled: Variant = root.get_property_value(UIA_IsEnabledPropertyId).unwrap();
let enabled_str: String = enabled.try_into().unwrap();
println!("enabled = {}", enabled_str);
} ```
``` rust use uiautomation::core::UIAutomation;
fn main() { let automation = UIAutomation::new().unwrap(); let root = automation.getrootelement().unwrap(); root.send_keys("{Win}D", 10).unwrap(); } ```