2012-04-17 24 views
6

Tôi đang cố gắng tìm tất cả các cửa sổ máy tính để bàn bằng cách sử dụng .NET UIAutomation OR White framework. tôi đã cố gắng:Tìm tất cả các cửa sổ trên máy tính để bàn bằng cách sử dụng UIAutomation .NET

1.)

  AutomationElement rootElement = AutomationElement.RootElement; 
      var winCollection = rootElement.FindAll(TreeScope.Subtree, Condition.TrueCondition); 

2.)

  Desktop.Instance.Windows(); 

Cả ArgumentException ném. Vui lòng cho tôi biết nếu có các cách khác để thực hiện việc này ...

CẬP NHẬT/TRẢ LỜI: Desktop.Instance.Windows(); hoạt động tốt ngoại trừ việc nó ném ngoại lệ trong khi gỡ lỗi mã bằng cách sử dụng VS2010.

Trả lời

4

Sử dụng TreeScope.Children nên có tác dụng nếu bạn muốn truy cập các phần tử con trực tiếp của máy tính để bàn ::

AutomationElement rootElement = AutomationElement.RootElement; 
    var winCollection = rootElement.FindAll(TreeScope.Children, Condition.TrueCondition); 

    foreach (AutomationElement element in winCollection) 
     Console.WriteLine(element.Current.Name); 
0

Đó là không thể bằng các phương tiện của cuộc gọi FindAll. Một số loại cửa sổ chỉ có sẵn bằng cách gọi FindWindow. Đây có thể là cửa sổ con của giao diện điều khiển MMC, tại thời điểm cửa sổ chính của mmc bị ẩn và không khả dụng đối với Giao diện người dùng tự động hóa. Có cách nào để lấy một chuỗi cửa sổ đang bật hay không, trong trường hợp cửa sổ không phải là cửa sổ chính của ứng dụng? Câu trả lời là liệt kê các luồng (thường là các quyền quản trị là cần thiết) và tính toán đó là luồng mà cửa sổ mà chúng ta quan tâm.

Nói chung, dường như không có cách nào liệt kê tất cả các cửa sổ giống như Spy ++. Ví dụ, Get-UIAWindow chỉ cần gọi FindWindow nếu tìm kiếm Tự động hóa giao diện người dùng không có kết quả.

1

dự án tự động hóa giao diện người dùng tại nơi làm việc sử dụng:

List<White.Core.UIItems.WindowItems.Window> windows = WindowFactory.Desktop.DesktopWindows(); 
Các vấn đề liên quan