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