Python Win32gui中的PyHANDLE对象
我最近在尝试创建一个透明窗口,让它可以覆盖在其他应用程序上。不过,我发现win32的扩展有点乱,有win32ui、win32gui、winxpgui等等,让人有点困惑。
总之,我想把一个窗口的句柄传给这个函数win32gui.UpdateLayeredWindow。
这个函数的第一个参数需要的是一个句柄,类型是pyhandle。
但是,所有找到窗口句柄的方法都返回一个整数,而不是pyhandle类型。即使是同一个模块里的方法也是这样。比如,win32gui.findwindow(None, "windowtitle")可以找到我想要的窗口并返回它的句柄,但返回的只是整数,而不是PyHandle。
这是关于这个对象的文档。http://docs.activestate.com/activepython/2.5/pywin32/PyHANDLE.html
这是关于findwindow方法的文档。docs.activestate.com/activepython/2.5/pywin32/win32gui__FindWindow_meth.html
还有这是那个不接受整数的函数的文档。docs.activestate.com/activepython/2.5/pywin32/win32gui__UpdateLayeredWindow_meth.html
我甚至尝试用WX来创建和查找窗口的句柄,但它也只返回整数。
还有另一个函数也是需要句柄的,由同一个团队写的,它接受整数作为句柄,叫做win32api.SetWindowLong。
我的问题是,有没有办法从我收到的整数创建一个PyHANDLE对象?我搞不明白。
2 个回答
pywintypes.HANDLE
PyHANDLE = HANDLE()
这段代码是用来创建一个新的HANDLE对象的。
根据PyHANDLE的文档说,“大多数接受句柄对象的函数也可以接受一个整数。”你有没有试过把整数传给UpdateLayeredWindow?
简单来说,PyHANDLE就是一个很薄的包装,它实际上是一个整数。它的特别之处在于,当这个PyHANDLE对象不再使用时,win32api.CloseHandle会被调用来关闭它。