我一直在研究在Windows 7上使用wx python包。具體來說,我希望能夠獲取現有窗口的圖像數據(即不是由python程序打開的窗口)。看起來我可以通過獲取窗口的設備上下文,創建兼容的設備上下文,複製位圖,然後使用它,從那裏獲得我喜歡的方式。問題是,我似乎無法找到獲取現有窗口的設備上下文(或句柄)的方式。我只能看到使用wx創建的方式從python程序的窗口中獲取它們。我該怎麼做才能做到這一點?非常感謝!wxPython - 使用wx python模塊獲取現有的windowDC /句柄?
1
A
回答
2
wx可能沒有辦法做到這一點。
您需要的Windows API非常簡單,您可以通過win32api
(或,如果您願意,但這可以做更多工作)使用它們。
首先,我不知道你打算如何識別你想要的窗口。如果你有它的班級和名字,你可以只需FindWindow
(或者,如果它不是頂級窗口,FindWindowEx
)。如果您想通過其他方式進行搜索,則可能需要撥打EnumWindow
(如果您不確定它是否是頂級窗口,則遞歸地加上EnumChildWindows
)。
此時,您可以撥打wx.Windows.AssociateHandle
將wx.Window
對象附加到HWND。
如果無論如何不能這樣做,GetDC
會爲您提供HWND的顯示上下文。然後你可以創建一個內存DC,或者在你的wx窗口的底層獲取本地窗口的DC,並且從一個到另一個。
1
只是爲了擴大對對方的回答,試試這個代碼(未經測試,我不是在Windows現在)...
# first use FindWindow or FindWindowEx to determine window handle
frame = wx.Frame(None)
frame.AssociateHandle(handle)
dc = wx.ClientDC(frame)
width, height = dc.GetSize()
bitmap = wx.EmptyBitmap(width, height)
mdc = wx.MemoryDC(bitmap)
mdc.Blit(0, 0, width, height, dc, 0, 0)
del mdc
bitmap.SaveFile('output.png', wx.BITMAP_TYPE_PNG)
+0
此外,請查看我的代碼,在桌面上繪製雪花 - 您還可以看到如何使用ctypes使用FindWindow函數。 https://github.com/fogleman/wxSnow/blob/master/wxsnow.py – FogleBird
相關問題
- 1. Python:獲取導入模塊的句柄
- 2. Python ImportError:沒有名爲wx的模塊
- 3. ImportError:沒有名爲wx的模塊
- 4. 的Python/wxPython的:導入錯誤:沒有模塊名爲lib.buttons
- 5. 獲取來自其他進程的模塊句柄
- 6. 如何從Win32的func ptr中獲取模塊句柄?
- 7. 如何獲取我自己的代碼模塊句柄?
- 8. 模塊句柄掛起模塊
- 9. Python Selenium獲取當前窗口句柄
- 10. 獲取pagefile.sys的句柄
- 11. 如何使用Python獲取Ubuntu Terminal的窗口句柄?
- 12. 在Python中導入wx模塊
- 13. 安裝Python模塊Tkinter,wx(Windows 8)
- 14. 使用窗口句柄獲取IUKOWN
- 15. 獲取窗口的所有句柄
- 16. 獲取Windows句柄的WNDPROC
- 17. 獲取調用解釋的Matlab函數的塊的句柄
- 18. matplotlib:如何獲取現有twinx()軸的句柄?
- 19. 如何從現有的listview句柄中獲取PyCListView對象?
- 20. 獲取模塊模塊 - Python的
- 21. 從DataGridViewTextBoxCell獲取句柄IntPtr?
- 22. 從MemoryMappedFile獲取Win32句柄
- 23. CreateProcess並獲取句柄
- 24. 獲取控制檯句柄
- 25. 從QFile獲取句柄
- 26. Winapi ::獲取可用的句柄數
- 27. 獲取調用菜單的句柄
- 28. 從句柄中獲取ContextMenu?
- 29. 獲取窗口句柄
- 30. wxPython AttributeError:模塊沒有屬性「框架」
'AssociateHandle'的確可以使用外部創建的窗口工作Python應用程序。 – FogleBird
@FogleBird:謝謝!讓我編輯答案,因爲這使事情變得更簡單。 – abarnert
好的。我在想這可能是這種情況。我試圖做你的建議,但遇到了問題,因爲我[在這個問題尋找](http://stackoverflow.com/questions/19980277/python-pywin32-getting-bitmap-of-client -區)。但是,我並沒有在那裏找到解決方案,而且我一直在自己找到解決問題的麻煩。那時我發現了wx並認爲它可能是一個解決方案。 – golmschenk