Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 启用ShowInTaskbar,然后SetParent()它将消失_C#_Wpf_Winapi - Fatal编程技术网

C# 启用ShowInTaskbar,然后SetParent()它将消失

C# 启用ShowInTaskbar,然后SetParent()它将消失,c#,wpf,winapi,C#,Wpf,Winapi,我正在使用C#WPF和.net4.5.2为windows7/8.1/10制作一个类似raimeter的桌面小部件应用程序。它找到桌面窗口句柄并将我的应用程序设置为它的子应用程序,这样我就可以创建小部件。我正在从我的主窗口\u加载的方法调用以下方法: public static void SetOnDesktop(Window window) { IntPtr hWnd = new WindowInteropHelper(window).Handle; In

我正在使用C#WPF和.net4.5.2为windows7/8.1/10制作一个类似raimeter的桌面小部件应用程序。它找到桌面窗口句柄并将我的应用程序设置为它的子应用程序,这样我就可以创建小部件。我正在从我的主窗口\u加载的方法调用以下方法:

public static void SetOnDesktop(Window window)
    {
        IntPtr hWnd = new WindowInteropHelper(window).Handle;
        IntPtr hDesktop = FindWindow("ProgMan", "Program Manager");
        SetParent(hWnd, hDesktop);
    }
这项功能前几天起作用了。然而,现在没有了,我也不知道为什么。我试着在7点和10点下运行它

如果在主窗口中启用ShowInTaskbar,只要调用SetParent(),它就会从任务栏中消失;但这一过程仍在运行

你知道为什么这不起作用吗

更新::我通过以下方式获得了此结果:

IntPtr hWnd = new WindowInteropHelper(window).Handle;
IntPtr hDesktop = FindWindow("ProgMan", "SysListView32");
SetParent(hWnd, hDesktop);

然而,我仍然想知道发生了什么。

可能相关:这不是桌面小部件的制作方式。IIRC桌面小部件通常只是普通窗口,它们有自己的自定义非客户端区域,并且没有任务栏按钮。(我从来没有看到过它的来源,所以这只是一个基于Windows如何工作的有根据的猜测。)@andlabs-我考虑过使用这种方法。然而,我需要我的小部件只在桌面上,在所有东西下面,并且是可拖动的。微软拒绝记录如何正确地做到这一点。为什么它是一个秘密并不那么明显,除了它深受“如果两个程序都这样做会怎么样?”问题的困扰。我怀疑你喜欢你故意做错事所得到的。桌面不应该有任务栏按钮,内置的“显示桌面”命令就足够了。顺便说一句,使用子窗口作为父窗口是有先例的,Adobe用他们的浏览器插件做到了这一点。他们永远无法解决这些可怕的焦点问题。如果大男孩们不能做到这一点,那么,祝你好运:)@HansPassant::谢谢你提供的信息。是的,它看起来像我想要的那样工作。但它似乎有一个奇怪的初始行为。在“程序管理器”工作之前,它会在开始时将小部件推到VisualStudio下面。现在,它最初位于顶部,但一旦失去焦点(即:将VS带回前景),它将永远位于底部。奇怪的此外,当我找不到我的应用程序窗口时,我启用了任务栏图标作为一种诊断视觉。奇怪的是,它有时会列在TaskView中,但当我点击它时,什么都没有发生。可能是相关的:这不是桌面小部件的制作方式。IIRC桌面小部件通常只是普通窗口,它们有自己的自定义非客户端区域,并且没有任务栏按钮。(我从来没有看到过它的来源,所以这只是一个基于Windows如何工作的有根据的猜测。)@andlabs-我考虑过使用这种方法。然而,我需要我的小部件只在桌面上,在所有东西下面,并且是可拖动的。微软拒绝记录如何正确地做到这一点。为什么它是一个秘密并不那么明显,除了它深受“如果两个程序都这样做会怎么样?”问题的困扰。我怀疑你喜欢你故意做错事所得到的。桌面不应该有任务栏按钮,内置的“显示桌面”命令就足够了。顺便说一句,使用子窗口作为父窗口是有先例的,Adobe用他们的浏览器插件做到了这一点。他们永远无法解决这些可怕的焦点问题。如果大男孩们不能做到这一点,那么,祝你好运:)@HansPassant::谢谢你提供的信息。是的,它看起来像我想要的那样工作。但它似乎有一个奇怪的初始行为。在“程序管理器”工作之前,它会在开始时将小部件推到VisualStudio下面。现在,它最初位于顶部,但一旦失去焦点(即:将VS带回前景),它将永远位于底部。奇怪的此外,当我找不到我的应用程序窗口时,我启用了任务栏图标作为一种诊断视觉。奇怪的是,它有时会列在TaskView中,但当我单击它时,什么也没发生。