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 following line to your Cargo.toml file:
toml
[dependencies]
uiautomation = "0.2.1"
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(sibing) = walker.get_next_sibling(&next) {
print_element(walker, &sibing, level + 1)?;
next = sibing;
}
}
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(); } ```