2017-07-30 67 views
5

Nếu tôi tạo một chuỗi mà tất cả nó làm là kết nối với một số quá trình và nhận được cửa sổ trên cùng, thì chương trình sẽ bị treo.Sử dụng pywinauto.top_window() treo cứng khi sử dụng nó với chủ đề

Tôi đã sửa lỗi nó một chút và dường như bị kẹt trong comtypes._compointer_base.from_params. Đây là toàn bộ traceback:

... 
-> self.top_win = self.app.top_window() 
    c:\python27\lib\site-packages\pywinauto\application.py(1095)top_window() 
-> backend=self.backend.name) 
    c:\python27\lib\site-packages\pywinauto\findwindows.py(197)find_elements() 
-> cache_enable=True) 
    c:\python27\lib\site-packages\pywinauto\uia_element_info.py(272)children() 
-> return self._get_elements(IUIA().tree_scope["children"], cond, cache_enable) 
    c:\python27\lib\site-packages\pywinauto\uia_element_info.py(261)_get_elements() 
-> ptrs_array = self._element.FindAll(tree_scope, cond) 
> c:\python27\lib\site-packages\comtypes\__init__.py(970)from_param() 
-> return value 

sau khi nhập bước trong pdb, nó cho thấy này và sau đó đóng băng:

(Pdb) s 
--Return-- 
> c:\python27\lib\site-packages\comtypes\__init__.py(970)from_param()-><POINTER... 41308a0> 
-> return value 

Dường như vấn đề là trong việc sử dụng comtypes với chủ đề, tôi đã cố gắng gọi pythoncom.CoInitialize() trong chuỗi cuộc gọi (và cả trong chính) nhưng nó không giúp ích gì.

Có thể làm gì ở đây?

Cảm ơn.

+1

Hmm ... Câu hỏi hay. Có lẽ có một số cạm bẫy cho luồng trong MS UI Automation cũng ... Nếu bạn có thể tìm thấy câu trả lời, nó có thể hữu ích gấp đôi vì chúng tôi đang lên kế hoạch thực hiện một số luồng để thực hiện "ghi lại phát lại" trong tương lai. –

+1

Một điều nữa tôi nghi ngờ là pywinauto chỉ tạo ra một đối tượng 'IUIA()' (vâng, nó là singleton). Tôi biết đó là một mô hình chống giả mạo, nhưng tôi đã làm cho nó như một giải pháp cho một vấn đề khác mà có lẽ không được giải quyết. :) Tôi sẽ nghĩ làm thế nào để làm cho 'IUIA()' instantiating một lần cho mỗi chủ đề hoặc cho phép số lượng không hạn chế của các trường hợp ... –

+1

[Vấn đề # 394] (https://github.com/pywinauto/pywinauto/issues/394) là một lời nhắc nhở cho chúng tôi. –

Trả lời

1

pywinauto==0.6.4 sử dụng chế độ đa luồng (MTA) cho đối tượng COM theo mặc định. Chỉ cần nâng cấp nó bằng pip install -U pywinauto và kiểm tra xem nó có phù hợp với bạn không.

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