feat(os): Windows UI Automation control + state reads#22
Merged
statik merged 1 commit intoJun 21, 2026
Merged
Conversation
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
merged commit Jun 21, 2026
1923abb
into
claude/tauri-migration-self-update-74d57g
5 checks passed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Step 10 of the Tauri/Rust migration
Windows UI Automation control + state reads (port of
internal/adapter/driven/uia), behindcfg(windows)— using thewindowscrate's typed COM interfaces rather than the Go code's raw vtable dispatch.What's here
uia::Engineowns an MTA COM apartment +IUIAutomationon a dedicated worker thread, servicing requests serially over a channel (COM thread-affinity), so the engine isSend + Syncand usable as a shared adapter.PlayerController(Invoke the AutomationId-mapped control forcontrol: uiaprofiles) andElementNamer(read an element's Name for the UIA state probe). Missing controls → acked no-op / not-detected, matching the Go semantics.ElementFromHandle→CreatePropertyCondition(AutomationId)→FindFirst(Descendants)→GetCurrentPatternAs(Invoke)/CurrentName.windowsfeaturesWin32_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