Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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# 如何将程序窗口还原到托盘中_C#_Restore_System Tray - Fatal编程技术网

C# 如何将程序窗口还原到托盘中

C# 如何将程序窗口还原到托盘中,c#,restore,system-tray,C#,Restore,System Tray,可能重复: 我想恢复(显示并提供焦点)到外部程序 问题是如果它在托盘上,MainWindowHandle是0,因此我无法还原窗口 Process[] process = Process.GetProcessesByName("MyApp"); //process.MainWindowHandle == 0 if it is on tray!! :( 我已经搜索过谷歌和stackoverflow。我发现了一些同样问题的线索,但没有答案 [DllImport("user32.dll")] pu

可能重复:

我想恢复(显示并提供焦点)到外部程序

问题是如果它在托盘上,MainWindowHandle是0,因此我无法还原窗口

Process[] process = Process.GetProcessesByName("MyApp");
//process.MainWindowHandle  == 0 if it is on tray!! :(
我已经搜索过谷歌和stackoverflow。我发现了一些同样问题的线索,但没有答案

[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr windowHandle, ShowWindowFlag flag);
如何将外部应用程序从任务栏中弹出并带到任务栏


我可以用FindWindow

    [DllImport("User32.dll", CharSet = CharSet.Unicode)]
    public static extern IntPtr FindWindow(string className, string windowName);

但是如果有多个进程具有相同的类和标题,FindWindow将只返回其中一个,我如何解决这个问题呢?

问题是,Windows不支持最小化系统托盘中的窗口。没有这样的国家。为了模拟这种行为,应用程序只需完全隐藏窗口。 您可以使用Spy++工具在目标应用程序的窗口可见时查找该窗口。 然后将其“最小化”到托盘,并查看属性中的更改。然后在你的应用程序中,你应该还原属性。这是必要的,因为有几种方法可以隐藏窗口,不同的应用程序使用其中一种


例如,Windows任务管理器将样式从VS_VISIBLE更改为VS_MINIMIZED(并删除VS_VISIBLE)。

问题是,Windows不支持将窗口最小化到系统托盘中。没有这样的国家。为了模拟这种行为,应用程序只需完全隐藏窗口。 您可以使用Spy++工具在目标应用程序的窗口可见时查找该窗口。 然后将其“最小化”到托盘,并查看属性中的更改。然后在你的应用程序中,你应该还原属性。这是必要的,因为有几种方法可以隐藏窗口,不同的应用程序使用其中一种


例如,Windows任务管理器将样式从VS_VISIBLE更改为VS_MINIMIZED(并删除VS_VISIBLE)。

否,这不是重复,我的问题是当应用程序隐藏时,最小化到任务栏。否,这不是重复,我的问题是当应用程序隐藏时,最小化到任务栏。谢谢,但是,如果应用程序已经在任务栏上,该怎么办?没有办法解决这个问题?您应该只执行一次描述的步骤,以便找到恢复窗口及其类和名称的确切方法。然后你可以调用FindwindowWinAPI函数(或C#中的等效函数,我不确定它是如何调用的),它将返回一个句柄给你,你可以改变窗口的样式,使它再次可见。如果有多个应用程序运行在同一个类和名称上呢?然后你必须找到你需要使用的应用程序。同样出于这个原因,我注意到,您应该检查窗口类。但实际上,没有100%正确的方法来确定您刚刚找到的窗口。我相信你针对一个特定的应用程序,并且可以找到它是如何工作的?但是FindWindow将始终返回相同的句柄,如果进程具有相同的类和名称,我如何获得另一个句柄?也许用FindWindowEx?我来看看这个方法。谢谢,但是,如果应用程序已经在托盘上了怎么办?没有办法解决这个问题?您应该只执行一次描述的步骤,以便找到恢复窗口及其类和名称的确切方法。然后你可以调用FindwindowWinAPI函数(或C#中的等效函数,我不确定它是如何调用的),它将返回一个句柄给你,你可以改变窗口的样式,使它再次可见。如果有多个应用程序运行在同一个类和名称上呢?然后你必须找到你需要使用的应用程序。同样出于这个原因,我注意到,您应该检查窗口类。但实际上,没有100%正确的方法来确定您刚刚找到的窗口。我相信你针对一个特定的应用程序,并且可以找到它是如何工作的?但是FindWindow将始终返回相同的句柄,如果进程具有相同的类和名称,我如何获得另一个句柄?也许用FindWindowEx?我来看看这个方法。