Skip to content

feat(os): Windows UI Automation control + state reads#22

Merged
statik merged 1 commit into
claude/tauri-migration-self-update-74d57gfrom
claude/step-10-win-uia
Jun 21, 2026
Merged

feat(os): Windows UI Automation control + state reads#22
statik merged 1 commit into
claude/tauri-migration-self-update-74d57gfrom
claude/step-10-win-uia

Conversation

@statik

@statik statik commented Jun 21, 2026

Copy link
Copy Markdown
Member

Step 10 of the Tauri/Rust migration

Windows UI Automation control + state reads (port of internal/adapter/driven/uia), behind cfg(windows) — using the windows crate's typed COM interfaces rather than the Go code's raw vtable dispatch.

What's here

  • uia::Engine owns an MTA COM apartment + IUIAutomation on a dedicated worker thread, servicing requests serially over a channel (COM thread-affinity), so the engine is Send + Sync and usable as a shared adapter.
  • Implements PlayerController (Invoke the AutomationId-mapped control for control: uia profiles) and ElementNamer (read an element's Name for the UIA state probe). Missing controls → acked no-op / not-detected, matching the Go semantics.
  • Flow: ElementFromHandleCreatePropertyCondition(AutomationId)FindFirst(Descendants)GetCurrentPatternAs(Invoke) / CurrentName.
  • Adds windows features Win32_UI_Accessibility, Win32_System_Com, Win32_System_Variant.

Verification

COM FFI → behavior validated on hardware via #11. Compilation verified locally with cargo check/clippy --target x86_64-pc-windows-gnu (real COM) plus the apple-darwin + Linux targets; all clippy-clean. CI matrix re-verifies.

Milestone 🎉

Every Go driven adapter is now ported to Rust (injection, window enumeration, UIA, VLC HTTP) on top of the fully-tested pure core. Remaining: the Tauri shell (tray + updater) + release workflow — which can't be verified in this Linux sandbox.

Part of: #10, #11, #12.


Generated by Claude Code

Port internal/adapter/driven/uia into hyperdeck-os behind cfg(windows),
using the windows crate's typed COM interfaces instead of raw vtable
dispatch:

- uia::Engine owns an MTA COM apartment + IUIAutomation on a dedicated
  worker thread, serving requests serially over a channel (COM thread
  affinity), so it is Send + Sync for use as a shared adapter
- implements PlayerController (Invoke the AutomationId-mapped control for
  control: uia profiles) and ElementNamer (read an element's Name for the
  UIA state probe); missing controls are an acked no-op / not-detected
- ElementFromHandle + CreatePropertyCondition(AutomationId) + FindFirst
  (descendants) + GetCurrentPatternAs(Invoke) / CurrentName

Adds windows features Win32_UI_Accessibility, Win32_System_Com,
Win32_System_Variant. Verified with cargo check/clippy --target
x86_64-pc-windows-gnu (real COM) + apple-darwin/linux; all clippy-clean.

With this, every Go driven adapter is ported to Rust.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R8X1NxFiaLGJzwUD5wgRTv
@statik
statik merged commit 1923abb into claude/tauri-migration-self-update-74d57g Jun 21, 2026
5 checks passed
@statik
statik deleted the claude/step-10-win-uia branch June 21, 2026 14:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants