5
如果我創建一個線程,它所做的只是連接到某個進程並獲取其頂部窗口,則該程序將掛起。使用pywinauto.top_window()掛起與線程一起使用
我調試了一下,它似乎卡在comtypes._compointer_base.from_params。這是整個回溯:
...
-> 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
鍵入PDB步驟之後,它顯示了這一點,然後凍結:
(Pdb) s
--Return--
> c:\python27\lib\site-packages\comtypes\__init__.py(970)from_param()-><POINTER... 41308a0>
-> return value
看來這個問題是在使用comtypes與線程,席力圖召pythoncom.CoInitialize()在調用線程(也在主)但它沒有幫助。
這裏可以做些什麼?
謝謝。
嗯......好問題。也許在MS UI Automation中也有一些線程陷阱......如果你能找到答案,它可能會有用兩次,因爲我們打算爲未來的「記錄 - 重放」實現做一些線程。 –
我還懷疑另一件事是pywinauto只創建一個'IUIA()'對象(是的,它是單例)。我知道這是一種反模式,但我將它作爲解決另一個問題的解決方法,可能無法解決問題。 :)我會考慮如何讓'IUIA()'實例化每個線程一次或允許不受限制的數量的實例... –
[問題#394](https://github.com/pywinauto/pywinauto/issues/394)是對我們的提醒。 –