using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace ConsoleApplication3
{
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 + "\\ConsoleApplication3.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;
}
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace ConsoleApplication3
{
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 + "\\ConsoleApplication3.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;
}
}
}
}
}
测试时要生成解决方案后,在文件目录下找到Debug文件夹中的exe文件进行测试。
这个方法只能屏蔽控制台的关闭按钮,右键任务栏的关闭方式还是能关闭程序。