C# 将窗口的父对象()设置为SHELLDLL\u DefView安全吗?
这不是建议问题的重复。来自我的问题:“我不是问如何编写代码。代码是有效的。”+“如果这个SHELLDLL\u deView基本上是桌面窗口,因此我应该接受应该避免使用小工具功能,或者如果这有点不同,可以使用。”编辑结束 据了解,使用桌面窗口通常是个坏主意。这似乎也是奥巴马的观点 不幸的是,桌面小工具已经退役,因此实现其功能的唯一方法是将其设置为窗口的父窗口 因为我自己知道的还不够多,我想知道是否有人能告诉我这个C# 将窗口的父对象()设置为SHELLDLL\u DefView安全吗?,c#,c++,winapi,com-interop,C#,C++,Winapi,Com Interop,这不是建议问题的重复。来自我的问题:“我不是问如何编写代码。代码是有效的。”+“如果这个SHELLDLL\u deView基本上是桌面窗口,因此我应该接受应该避免使用小工具功能,或者如果这有点不同,可以使用。”编辑结束 据了解,使用桌面窗口通常是个坏主意。这似乎也是奥巴马的观点 不幸的是,桌面小工具已经退役,因此实现其功能的唯一方法是将其设置为窗口的父窗口 因为我自己知道的还不够多,我想知道是否有人能告诉我这个SHELLDLL\u DefView基本上是桌面窗口,因此我应该接受应该避免使用gad
SHELLDLL\u DefView
基本上是桌面窗口,因此我应该接受应该避免使用gadget功能,或者这有点不同,可以使用
我不是在问如何编写代码。代码是有效的。我只是想知道它是不是保险箱,或者它是否会在路上引起麻烦
(我的代码在C++中,但它与Win32是互通的,所以我用C++来标记它,因为C++的DEVs最可能知道这个)。 如果有人能告诉我这个SHELLDLL_deView基本上是不是桌面窗口
这取决于你所说的“基本上”是什么意思 你链接的来源清楚地表明有两件事人们称之为“桌面窗口”IShellView
实例,该实例通常具有“SHELLDLL_DefView”类(但我认为在启用Active Desktop(Win98/2000/XP?)时,层次结构并不相同)。此内部类名未记录为稳定的SetParent
使shell桌面成为您的父对象,那么您肯定是在违反规则。但可能会导致与连接的输入队列相关的问题
另一个问题是shell可能会崩溃并导致进程崩溃
只要你明白shell的布局将来可能会改变,我就说它是“安全的”。也许不是商业软件,但肯定是已知Windows版本上的小玩具小玩意
我不知道C#是否有问题,.NET很可能没有在这种情况下进行测试。如果我要这样做,我肯定会在非托管语言中使用纯Win32 桌面窗口的特殊性与您将面临的实际问题无关:跨线程安装窗口层次结构(父/子、所有者/所有者)需要两个线程的合作(有关详细信息,请参阅)。除非同时控制两个参与线程,否则无法安全地执行此操作。由于您询问的是桌面窗口,因此至少有一个线程是您无法控制的 如果这还不够吓唬你,这里有一些额外的阅读材料: