网上查找资料,是把目前程序的句柄设置为桌面句柄建立父子关系就可以
但我不论怎么尝试都不行,不知道哪里有问题?
方式1:失败
parent = win32gui.FindWindow("Progman", None):
child = win32gui.FindWindow("目标程序类名",None)
win32gui.SetParent(child,parent);
方式2:失败
parent = win32gui.FindWindowEx('SHELLDLL_DefView', None)
child = win32gui.FindWindow("目标程序类名",None)
win32gui.SetParent(child,parent);
方式3:失败
parent = win32gui.FindWindowEx('SysListView32', 'FolderView')
child = win32gui.FindWindow("目标程序类名",None)
win32gui.SetParent(child,parent);
方式4:失败
parent = win32gui.GetDesktopWindow()
child = win32gui.FindWindow("目标程序类名",None)
win32gui.SetParent(child,parent);
请问有没有人知道怎么实现这个效果。
你查的是什么资料?这事情以前我也想过。把程序窗体嵌入壁纸这个肯定不行,因为壁纸不是窗口。
把窗体嵌入桌面理论上可行,但是存在两个问题,一个是桌面的确是SysListView32,但是为了画桌面背景,它存在一系列自绘和调整,所以窗体放进去根本显示不出来,但用spy++可以看到。
另一个,不同的进程,虽然放进去了,但是如果这个窗体关闭,会导致explorer崩溃,然后重新启动,窗口消失。
如果你有别的语言的成功能做的资料,或者有什么软件做到了,可以帮你继续研究下。
目前我看到的程序一般都是悬浮窗口或者将自己始终设置为zindex为最后(不允许在任何程序前面),达到一样的效果,可以实现。