在做项目的时候需要这样一个功能,让控制台程序不能随意关闭。找了半天资料,终于通过WINDOWS的API完美解决了。如下
代码
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;
}
}
}
}
}