【问题标题】:Detect that Window is minimized by Win+D when ShowInTaskbar="False"当 ShowInTaskbar="False" 时检测窗口被 Win+D 最小化
【发布时间】:2019-07-29 05:28:35
【问题描述】:

我不是要参加活动。我在问如何问(使用 C#,而不是 WinAPI)“窗口最小化了吗?”。

WindowState 不够好。当ShowInTaskbar="False" 时,Win+D 后将是Normal。在定时器中使用Debug.WriteLine(WindowState); 试试。

那么,是否有可靠的托管方式来检查窗口是否已最小化(即使ShowInTaskbarFalse)?

【问题讨论】:

  • 如果你想知道窗口是否被最小化,这与“使用 Win+D”是一个非常不同的问题。 Win+D 的作用是调用资源管理器的“显示桌面”功能,以最小化所有 Windows。另外,也许还可以在桌面上设置输入焦点?您也可以通过右键单击任务栏来调用它。
  • @Christopher 我的意思是 Win+D,而不是 Window 上的最小化按钮,它更改WindowState,甚至引发 StateChanged 事件。
  • @ColinSmith 我需要在 WPF 应用程序中创建一个 Winforms 表单。并非不可能,但我会留下来看看是否有一些更简单的解决方案。谢谢。
  • 这里有几个想法:social.msdn.microsoft.com/Forums/windowsdesktop/en-US/… ....主要想法是挂钩 ToggleDesktop() 调用...。这样您就知道它已被“调用”,或者挂钩 WIN +D 按键(当然,如果有人通过任务栏显示桌面单击显示桌面,这当然无济于事)......或使用计时器来检测 zorder 的变化。或者将您的窗口设置为 TopMost....但是您不太可能想要那个。 stackoverflow.com/questions/5477961/…

标签: c# .net wpf


【解决方案1】:

尝试使用IsIconicWinAPI函数,声明如下:

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool IsIconic(IntPtr hWnd);

hWnd 是窗口句柄,您可以使用WindowInteropHelper 类获取它。 PInvoke也有一些例子

【讨论】:

  • 感谢您的想法,但它返回 false。
  • @ispiro 根据名称,我猜如果您被最小化,它应该返回 false - 也就是不是“标志性”。
  • 来自docs:Determines whether the specified window is minimized (iconic). 但无论如何,我测试了它,当窗口上的最小化按钮最小化时它显示为true。
猜你喜欢
  • 1970-01-01
  • 2010-11-06
  • 2010-10-27
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多