处理Visual Studio的FormClosing事件(确认关闭)

时间:2017-11-07 12:10:57

标签: c# vsix

我需要编写一个应用来确认Visual Studio的关闭吗?我认为,可以使用WinForms中的FormClosing事件,并且可以取消关闭。

主要需要防止Visual Studio 2017的意外退出。但VS 2015+具有Metro UI。 NoClose从标题栏右键菜单中删除关闭菜单,但无法禁用右上方关闭按钮。

修改

为什么需要这样做:通常我有很多打开的窗户。我使用WhatsApp桌面,这个应用程序不是全屏启动。但看起来它已经最大化了。当我尝试通过将指针移动到屏幕顶部(在我的右侧监视器上,甚至没有检查窗口是否最大化)来快速关闭它时,我实际上单击该窗口下的应用程序。这主要是Visual Studio。最终VS关闭了。我正在使用一个非常大的解决方案,因此打开或关闭解决方案需要很长时间。由于VS不是开源的,我需要以某种方式确认退出。这很烦人,而且经常发生(一天2-3次)。

另请注意,我并不是唯一需要此功能的开发人员,而其他IDE已经有这样的选择。

2 个答案:

答案 0 :(得分:2)

创建了一个简单的(单行)扩展。 应该这样做:提示关闭Visual Studio :)

https://marketplace.visualstudio.com/items?itemName=NikolayBelyh.ClosePrompt2017

只需使用“QueryClose”包来提升提示:

https://github.com/nbelyh/ClosePrompt/blob/e583b2edc1a5a00104e69666b8fdc3efe6dd5896/ClosePrompt/ClosePromptPackage.cs#L56

Gimme 5星如果有效^ _ ^

答案 1 :(得分:1)

引用强大的Raymond Chen:

  

可用性研究表明,当您禁用“关闭”按钮时,用户真的不喜欢它。这让他们感到困惑和不舒服。这就是为什么标准Windows向导无法为您提供禁用“关闭”按钮的方法的原因。用户应该总是有出路。

我认为这是一个你不关心的问题,只是想要一个解决方案而他also demonstrates a way禁用关闭按钮/菜单:

void DisableCloseButton(HWND hwnd)
{
 EnableMenuItem(GetSystemMenu(hwnd, FALSE), SC_CLOSE,
                MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
}

void EnableCloseButton(HWND hwnd)
{
 EnableMenuItem(GetSystemMenu(hwnd, FALSE), SC_CLOSE,
                MF_BYCOMMAND | MF_ENABLED);
}

根据应用程序的不同,这可能还不够,在这种情况下,您需要inject代码进入应用程序并对窗口进行子类化,以便您可以处理WM_CLOSE