2016-09-22 13 views
9

Tôi muốn biết, trong NET, nếu (quản lý) Microsoft UI Automation framework cung cấp một số cách để nhanh chóng một loại AutomationElement cho giá trị AutomationId của một cửa sổ, đàn áp cách này, cần thiết phải tìm kiếm trên cửa sổ bằng cách xử lý cửa sổ hoặc các loại số nhận dạng khác.Có thể khởi tạo loại AutomationElement được đưa ra một giá trị AutomationId không?

Một ví dụ giả viết bằng VB.NET để hiểu mục đích của tôi:

Dim automationId As Integer = 1504 
Dim element As AutomationElement = AutomationElement.FromAutomationId(automationId) 
+0

Điều tốt nhất tôi có thể tìm thấy là [this] (https://msdn.microsoft.com/en-us/library/aa349646 (v = vs.110) .aspx). Nếu không, tôi muốn nói xây dựng các lớp của riêng bạn (nếu có thể) và đổ bóng/ghi đè thuộc tính 'AutomationId'. Sau đó, bất cứ khi nào setter của nó được thực hiện, bạn lưu trữ "cửa sổ"/"kiểm soát" trong một danh sách toàn cầu, chia sẻ/từ điển. –

+0

@Visual Vincent Thankyou, "vấn đề" tôi thấy là với giải pháp đó là một phương pháp tìm kiếm và nó cũng cần một AutomationElement để tìm kiếm thông qua các yếu tố của nó, một thuật toán tìm kiếm đắt tiền. Tôi muốn biết nếu tồn tại một cách "trực tiếp" hơn để tránh tất cả những điều đó. – ElektroStudios

Trả lời

3

Ồ, không. Bất kỳ thuộc tính tự động hóa nào là thuộc tính của phần tử. Các yếu tố tự động hóa không nhất thiết phải tương ứng với HWND (mỗi HWND có một yếu tố tự động hóa, nhưng rất ít yếu tố tự động hóa có HWND, đặc biệt là trong các khung UI hiện đại) và do đó cần phải đi bộ. Ngoài ra, điều tốt đẹp về UI Automation là đi bộ trên cây xuất hiện ở phía nhà cung cấp, không có trong ứng dụng của bạn, giảm số lượng cuộc gọi xử lý chéo.

Các vấn đề liên quan