有没有办法让c sharp程序无法最小化? 有没有办法阻止程序受到“显示桌面”按钮的影响?
答案 0 :(得分:4)
您需要使用Window Hook API。
此API包括基于计算机的培训程序或基于Kiosk的应用程序等应用程序用于使自己成为可与用户交互的唯一窗口的方法。有许多不同的方法可以挂钩 - 但是an article on MSDN描述了如何使用.NET中可能有用的API。
有一个特定的钩子事件:HCBT_MINMAX
你可以截取并取消你的窗口。
如果你要做的只是在你的应用中禁用最小化按钮,你可以查看以下问题的已接受答案How to disable the minimize button in C#?。但是,如果用户单击“显示桌面”,或者某个其他窗口想要显示在您的应用程序上,则不会阻止隐藏应用程序。
提醒一句: 您应该非常小心选择编写以这种方式控制机器的应用程序的实例。这是用户友好设计的对立面。它仅适用于狭窄的情况,例如基于计算机的培训,信息亭或ATM机软件,您真正想要完全控制机器。
答案 1 :(得分:0)
如何捕捉最小化事件(或其他检查窗口当前是否已最小化的方法),并且juste再次将其最小化?
答案 2 :(得分:0)
嗯,我能想到的唯一方法是捕捉最小化事件并为此编写代码。
我建议反对它,因为最终,用户应该决定他想做什么。
另一种方法可能是强制将表单作为对话框,最顶层没有最小化按钮。但是在这种情况下,用户可以使用“显示桌面”将其最小化。
答案 3 :(得分:0)
您可以防止自己被最小化,但我认为ShowDesktop按钮会进行一些堆肥,这使得无法预防而无需设置最顶层。
答案 4 :(得分:0)
我认为你不应该强迫终端用户,毕竟他们付了他们的电脑,他们的Windows许可证,所以他们应该能够自己做一些事情而不是限制最终用户被迫看一个无法最小化的窗户。这是违反标准指南,一个窗口有一个最小化/最大化/关闭和一个系统菜单,以及一个标题...说它可能听起来非常苛刻......它类似于要求最终用户必须开车一辆没有发动机的汽车,推动汽车前进迫使他们开车......
尽管如此,如果你仍然坚持,你可以覆盖WndProc
并处理SC_COMMAND
消息的SC_MINIMIZE
,这将覆盖最小化的默认处理程序...
private const int SC_CLOSE = 0xF060; private const int SC_MAXIMIZE = 0xF030; private const int SC_MINIMIZE = 0xF020; private const int SC_MOVE = 0xF010; private const int SC_SIZE = 0xF000; private const int SC_RESTORE = 0xF120; private const int SC_NEXTWINDOW = 0xF040; private const int SC_PREVWINDOW = 0xF050; private const int WM_MENUSELECT = 0x11F; private const int MF_SYSMENU = 0x2000; private const int MF_DISABLED = 0x2; private const int MF_GRAYED = 0x1; private const int MF_HILITE = 0x80; static int HiWord(int Number) { return (Number >> 16) & 0xffff; } static int LoWord(int Number) { return Number & 0xffff; } [System.Security.Permissions.SecurityPermission( System.Security.Permissions.SecurityAction.LinkDemand, Flags = System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)] protected override void WndProc(ref System.Windows.Forms.Message m) { int nHiWord = HiWord(m.WParam.ToInt32()); int nLoWord = LoWord(m.WParam.ToInt32()); switch (nLoWord) { case SC_RESTORE: break; case SC_MINIMIZE: // Handle the minimize! break; case SC_MAXIMIZE: break; case SC_SIZE: break; case SC_CLOSE: break; case SC_MOVE: break; case SC_NEXTWINDOW: break; } base.WndProc(ref m); }
希望这有帮助, 最好的祝福, 汤姆。
答案 5 :(得分:0)
设置任务栏的窗口父级。完成!
答案 6 :(得分:-1)
别。我希望API甚至不存在。如果用户想要最小化您的计划,他/她有权利。弄乱用户有权使用他/她自己的系统(想想防止使用后退按钮,防止最小化,防止快速转发DVD的某些部分)应该受到死刑的惩罚。