python win32 找如何才能将一个窗口 置父到外部的D3D窗口中 正常的办法 置父后 窗口就显示不了或者将就点不了了 要怎么解决
要将一个窗口置父到外部的D3D窗口中,你需要使用win32api库中的一些函数来实现。
首先,你需要获取D3D窗口的句柄。你可以使用FindWindow函数来根据窗口标题或类名来获取窗口句柄。例如:
import win32gui
d3d_hwnd = win32gui.FindWindow("D3D_Window_Class", "D3D Window Title")
然后,你需要获取要置父的窗口的句柄。你可以使用FindWindow函数来根据窗口标题或类名来获取窗口句柄。例如:
import win32gui
hwnd = win32gui.FindWindow("Window_Class", "Window Title")
接下来,你可以使用SetParent函数将窗口置父到D3D窗口中。例如:
import win32gui
win32gui.SetParent(hwnd, d3d_hwnd)
但是,将一个窗口置父到D3D窗口中可能会导致窗口无法正常显示或无法交互。这是因为D3D窗口在绘制时可能会覆盖其他窗口,导致其他窗口不可见或不可交互。
如果你想要解决这个问题,你可以尝试创建一个透明窗口作为D3D窗口的子窗口,然后将要置父的窗口放置在透明窗口上。这样可以保持窗口的可见性和交互性。你可以使用CreateWindowEx函数来创建透明窗口,并使用SetLayeredWindowAttributes函数来设置透明度。然后,使用SetParent函数将要置父的窗口置父到透明窗口中。
以下是一个示例代码:
import win32api
import win32con
import win32gui
def create_transparent_window():
hwnd = win32gui.CreateWindowEx(
win32con.WS_EX_LAYERED | win32con.WS_EX_TRANSPARENT,
"Transparent_Window_Class",
"Transparent Window Title",
win32con.WS_POPUP | win32con.WS_VISIBLE,
0, 0, 800, 600,
None, None, win32api.GetModuleHandle(None), None)
win32gui.SetLayeredWindowAttributes(hwnd, 0, 255, win32con.LWA_ALPHA)
return hwnd
d3d_hwnd = win32gui.FindWindow("D3D_Window_Class", "D3D Window Title")
hwnd = win32gui.FindWindow("Window_Class", "Window Title")
transparent_hwnd = create_transparent_window()
win32gui.SetParent(hwnd, transparent_hwnd)
请注意,以上代码仅为示例,实际的窗口类名和标题可能会有所不同,你需要根据实际情况进行修改。此外,你还需要根据实际需求调整窗口的大小和位置
原文地址: https://www.cveoy.top/t/topic/i0w6 著作权归作者所有。请勿转载和采集!