Rust for windows uiautomation

The uiatomation-rs crate is a wrapper for windows uiautomation. This crate can help you make windows uiautoamtion API calls conveniently.

Usages

Start by adding the following line to your Cargo.toml file:

toml [dependencies] uiautomation = "0.3.3"

Make use of any windows uiautomation calls as needed.

Examples

Print All UIElements

``` 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(())

} ```

Open Notepad and Input Text

``` 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();
}

} ```

Get Properties As Variant

``` 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);

} ```

Simulate Keyboard Input

``` rust use uiautomation::core::UIAutomation;

fn main() { let automation = UIAutomation::new().unwrap(); let root = automation.getrootelement().unwrap(); root.send_keys("{Win}D", 10).unwrap(); } ```