Python Win32gui中的PyHANDLE对象

5 投票
2 回答
17900 浏览
提问于 2025-04-16 03:07

我最近在尝试创建一个透明窗口,让它可以覆盖在其他应用程序上。不过,我发现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 个回答

6

pywintypes.HANDLE

PyHANDLE = HANDLE()

这段代码是用来创建一个新的HANDLE对象的。

6

根据PyHANDLE的文档说,“大多数接受句柄对象的函数也可以接受一个整数。”你有没有试过把整数传给UpdateLayeredWindow?

简单来说,PyHANDLE就是一个很薄的包装,它实际上是一个整数。它的特别之处在于,当这个PyHANDLE对象不再使用时,win32api.CloseHandle会被调用来关闭它。

撰写回答