win32gui 中的 Python PyHANDLE 对象

问题描述 投票:0回答:2

我一直在尝试创建一个覆盖另一个应用程序的透明窗口。 我发现 win32 扩展有点乱,有 win32ui、win32gui、winxpgui 等,有点令人困惑。

无论如何,我正在尝试将窗口句柄传递给此函数 win32gui.UpdateLayeredWindow

它想要的第一个参数是一个句柄,作为 pyhandle 类型。

所有查找窗口句柄的方法都返回 int,而不是 pyhandle 类型。 即使是来自相同模块的。 win32gui.findwindow(None, "windowtitle") 查找并返回我想要的窗口的句柄,但仅以 int 形式而不是 PyHandle 形式。

这是该对象的文档。 http://docs.activestate.com/activepython/2.5/pywin32/PyHANDLE.html

这里是 findwindow 方法的文档。 docs.activestate.com/activepython/2.5/pywin32/win32gui__FindWindow_meth.html

这是不接受 int 的方法的文档。 docs.activestate.com/activepython/2.5/pywin32/win32gui__UpdateLayeredWindow_meth.html

我什至尝试过使用 WX 创建和查找窗口句柄,它也只返回 int。

还有另一个需要句柄的函数,由同一个人编写,并且它接受 int 作为句柄。 win32api.SetWindowLong

问题是,有没有办法从我收到的 int 创建一个 PyHANDLE 对象?我想不通。

python winapi win32gui
2个回答
6
投票

正如 PyHANDLE 的文档所说,“大多数接受句柄对象的函数也接受整数”。 您是否尝试过向 UpdateLayeredWindow 传递整数?

基本上,PyHANDLE 只是一个整数的薄包装,具有额外的属性,当 PyHANDLE 对象消失时 win32api.CloseHandle 将被调用。


6
投票

以下代码创建一个新的

HANDLE
对象:

import pywintypes

PyHANDLE = pywintypes.HANDLE()
© www.soinside.com 2019 - 2024. All rights reserved.