C# 如何禁用alt+;应用程序的F4?
如何在C#应用程序范围内禁用ALT+F4应用程序 在我的应用程序中,我有许多WinForms,我想禁用使用ALT+F4关闭表单的功能。不过,用户应该能够使用表单的“X”来关闭表单C# 如何禁用alt+;应用程序的F4?,c#,.net,winforms,C#,.net,Winforms,如何在C#应用程序范围内禁用ALT+F4应用程序 在我的应用程序中,我有许多WinForms,我想禁用使用ALT+F4关闭表单的功能。不过,用户应该能够使用表单的“X”来关闭表单 同样,这不仅仅是一种形式。我正在寻找一种方法,使ALT+F4是整个应用程序禁用,将不会为任何形式的工作。有可能吗?您可以在主启动方法中添加如下内容: namespace WindowsFormsApplication1 { static class Program { /// <s
同样,这不仅仅是一种形式。我正在寻找一种方法,使ALT+F4是整个应用程序禁用,将不会为任何形式的工作。有可能吗?您可以在主启动方法中添加如下内容:
namespace WindowsFormsApplication1
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.AddMessageFilter(new AltF4Filter()); // Add a message filter
Application.Run(new Form1());
}
}
public class AltF4Filter : IMessageFilter
{
public bool PreFilterMessage(ref Message m)
{
const int WM_SYSKEYDOWN = 0x0104;
if (m.Msg == WM_SYSKEYDOWN)
{
bool alt = ((int)m.LParam & 0x20000000) != 0;
if (alt && (m.WParam == new IntPtr((int)Keys.F4)))
return true; // eat it!
}
return false;
}
}
}
命名空间窗口窗体应用程序1
{
静态类程序
{
///
///应用程序的主要入口点。
///
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.AddMessageFilter(新的AltF4Filter());//添加消息筛选器
Application.Run(新Form1());
}
}
公共类AltF4Filter:IMessageFilter
{
公共bool预过滤器消息(参考消息m)
{
常量int WM_SYSKEYDOWN=0x0104;
if(m.Msg==WM\u SYSKEYDOWN)
{
bool alt=((int)m.LParam&0x20000000)!=0;
if(alt&&(m.WParam==newintptr((int)key.F4)))
return true;//吃掉它!
}
返回false;
}
}
}
您应该问自己一个问题-为什么要删除这种关闭对话框的标准方式?你正在打破惯例,这样做需要一个很好的理由-查看用户体验堆栈交换。哇,可能的副本与回答者完全相同,然后突然将其删除。背阴的哇,然后将其编辑为:,我建议您执行以下操作:
,@Daniel请停止复制和粘贴他人的答案,同时获取学分。把这个问题标记为重复问题,然后用你的时间去做更好的事情。@john:如果你不得不一次又一次地用每种形式写代码,那就不会是全局性的。可以创建包含该功能的表单
基类,或者枚举应用程序.OpenForms
集合并动态附加此行为。无论如何,我相信全球解决方案值得一个自己的答案,即使它是基于上面链接的现有答案。问题的关键是如何在所有表单中重复使用链接答案中提供的代码,而这些答案中没有回答。@john:代码中最重要的部分是你不知道如何编写的部分,至少对于提问者来说是这样。请尊重他们的问题。这是一个有趣的解决方案。如果消息处理延迟(由于延迟)并且Control.ModifierKeys
不再报告Ctrl
被按下(错过),该怎么办?谢谢您的解决方案。我在找这样的东西。与alt+F4一起,它还过滤掉alt+shift+F4。只是想让你知道。@AllonGuralnek-Hmm。。。我发现我们有一个挑剔的听众:-)我已经更新了我的答案,使用LPRAM的第29位而不是Control.ModifierKeys.Hello@SimonMourier我如何才能禁用CTRL-ALT-DEL、ALT-TAB和开始菜单谢谢。@DreamerXD-问另一个问题