【问题标题】:Windows +D disabled but not workingWindows +D 禁用但不工作
【发布时间】:2013-02-15 13:51:52
【问题描述】:

我有两个窗体 MainForm 和 MinimizedMainForm。我想为这两种形式禁用 Windows+D。两种形式的父级都是第三种形式 FormBase。我使用以下代码禁用 Windows+D

private const in GWL_HWNDPARENT =-8

IntPtr hprog = NativeMethods.FindWindowEx(NativeMethods.FindWindowEx(NativeMethods.FindWindow("Progman", "Program Manager"),
                          IntPtr.Zero, "SHELLDLL_DefView", ""),
                          IntPtr.Zero, "SysListView32", "FolderView");
        NativeMethods.SetWindowLong(this.Handle, GWL_HWNDPARENT, hprog);

我面临的问题是,如果按 Win+D,我的 MainForm 永远不会最小化。 对于 MinimizedForm 的首次启动,如果我按 Win+D,它不会被最小化。 但是如果我按 Win+D ,第二次 + 加载最小化的MainForm ,表单会被最小化。我在两个表单的 FormLoad 事件上添加了上面的代码。当我单击 MainForm 上的面板时打开 MinimizedMainForm,反之亦然。 MainForm 是我项目的起始表单。

我应该怎么做才能阻止表单最小化 2nd+ loadForm 事件?

【问题讨论】:

  • 为什么要阻止最小化您的应用程序?如果用户想要最小化所有窗口,您的窗口也应该服从。如果没有,那就很烦人了。
  • @CodeCaster:因为它是一个桌面应用程序。类似于 Windows 小工具。
  • 然后让它成为一个在这方面符合的小部件。
  • @GrantThomas:如何制作小部件?您的意思是使用 HTML 和 CSS 进行开发?

标签: c# winforms


【解决方案1】:

也许你必须创建不能最小化的窗口而不是阻止最小化可以最小化的窗口:MinimizeBox = false ? (我打赌不可能这么简单,但我不会写cmets,所以这里有一个解决方案=D)

【讨论】:

  • 从用户体验来看,你无法真正阻止最小化。这仅意味着一旦您与桌面交互,该应用程序将再次弹出 - 但在两者之间它会被最小化并显示桌面。
【解决方案2】:

基本上 Win + D 不是为了最小化窗口,而是为了显示桌面。 Win+D = 显示桌面。所以即使你的窗口没有最小化框,它也会被最小化。

此外,当您按下 Win+D 时,处理它的不是您的应用程序,而是处理它的是 Windows 本身,因此它根本不会到达您的应用程序,因此如果您在其中处理它是没有意义的你的申请。

尝试找出你的应用程序启动的一些技巧,你会阻止 Windows 处理 Win+D 键。

注册表中有一个键

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer

在此处更改热键的值将禁用 Win+D 组合,但不建议这样做,因为您必须在应用程序离开焦点时将其恢复。

是的,如果您正在制作小部件,请遵循创建小部件的要求。它会自动为您提供此类功能

【讨论】:

  • 但是 MainForm 怎么没有被最小化呢?甚至 MinimizedForm 在首次加载时也没有被最小化?怎么样?
  • 我不确定,但我认为您应该构建应用程序的发布版本并在另一台电脑上运行它,而不是从 IDE 启动它,它可能会显示一致的行为。
猜你喜欢
  • 2016-03-09
  • 2011-09-11
  • 2018-05-26
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 2017-08-05
相关资源
最近更新 更多