最近开发了一个控制台程序,但总是被其他人无意中关掉,所以就找了一下资料,下面的代码测试成功,可以取消关闭按钮的操作。(注:调试环境下该功能是无效的*_*)
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace ConsoleApplication1
{
class Program
{
[DllImport("User32.dll ", EntryPoint = "FindWindow")]
private static extern int FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll ", EntryPoint = "GetSystemMenu")]
extern static IntPtr GetSystemMenu(IntPtr hWnd, IntPtr bRevert);
[DllImport("user32.dll ", EntryPoint = "RemoveMenu")]
extern static int RemoveMenu(IntPtr hMenu, int nPos, int flags);
static void Main(string[] args)
{
//与控制台标题名一样的路径
string fullPath = System.Environment.CurrentDirectory +"\\ConsoleApplication1.exe";
//根据控制台标题找控制台
int WINDOW_HANDLER = FindWindow(null, fullPath);
//找关闭按钮
IntPtr CLOSE_MENU = GetSystemMenu((IntPtr)WINDOW_HANDLER, IntPtr.Zero);
int SC_CLOSE = 0xF060;
//关闭按钮禁用
RemoveMenu(CLOSE_MENU, SC_CLOSE, 0x0);
//使用命令关闭
while (true)
{
if (Console.ReadLine().ToLower() == "exit")
{
return;
}
}
}
}
}