通过批处理命令禁用cmd关闭按钮

时间:2012-12-07 12:29:23

标签: batch-file cmd

我有点新的批处理脚本。我最近有一个问题,关于如何在批处理文件运行时禁用cmd的关闭按钮。我看到一些关于如何克服这个问题的帖子。但是那里说的东西已经出来了我的触及范围..如果任何人都可以指向一个正确的方向,它会非常棒。如果sum1可以告诉我如何在我的批处理文件中执行我之前提到的操作,那将是非常优选的。所以当我在其他PC中使用它时效果仍然存在...

感谢

2 个答案:

答案 0 :(得分:1)

你不能。

您可以使用VBScript隐藏批处理文件的执行

Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("yourbatchfile.bat"), 0, True

这会将其隐藏起来,但不会阻止他们在任务管理器中将其杀死。

你提出的问题无法完成。

答案 1 :(得分:1)

您可以创建一个可执行文件,为所有名为“cmd”的进程禁用[X]按钮,并在批处理文件的第一行运行该可执行文件。

这是一个c#程序就是这样做的:

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace Remove__X__Button_from_another_process
{

class Program
{
    [DllImport("user32.dll")]
    static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);

    [DllImport("user32.dll")]
    static extern bool DeleteMenu(IntPtr hMenu, uint uPosition, uint uFlags);

    const uint SC_CLOSE = 0xF060;
    const uint MF_BYCOMMAND = 0x00000000;

    static void Main(string[] args)
    {
        //Console.Write("Please enter process name:"); // "cmd"
        //String process_name = Console.ReadLine();

        Process[] processes = Process.GetProcessesByName("cmd");
        foreach (Process p in processes)
        {
            IntPtr pFoundWindow = p.MainWindowHandle;

            IntPtr nSysMenu = GetSystemMenu(pFoundWindow, false);
            if (nSysMenu != IntPtr.Zero)
            {
                if (DeleteMenu(nSysMenu, SC_CLOSE, MF_BYCOMMAND))
                {

                }
            }
        }
        Environment.Exit(0);
    }
}