如何在Windows 10/Visual Studio 2015中禁用F11?

3

Windows的帮助过度了。当我按下F11时,我的控制台就全屏了。 我希望禁用这个功能,原因如下。

ConsoleKeyInfo input;
            do
            {
                input = Console.ReadKey(true);
                StringBuilder output = new StringBuilder(
                String.Format(input.Key.ToString()));
                string lockedDiceInput = Convert.ToString(input.Key);
                //yes I should make a method for this but later
                switch (lockedDiceInput)
                {
                    case "F1":
                        Console.WriteLine("Assigning score to {0}", targetsSheetArray[0]);
                        break;
                    case "F2":
                        Console.WriteLine("Assigning score to {0}", targetsSheetArray[1]);
                        break;
                    case "F3":
                        Console.WriteLine("Assigning score to {0}", targetsSheetArray[2]);
                        break;
                    case "F4":
                        Console.WriteLine("Assigning score to {0}", targetsSheetArray[3]);
                        break;
                    case "F5":
                        Console.WriteLine("Assigning score to {0}", targetsSheetArray[4]);
                        break;
                    case "F6":
                        Console.WriteLine("Assigning score to {0}", targetsSheetArray[5]);
                        break;
                    case "F7":
                        Console.WriteLine("Assigning score to {0}", targetsSheetArray[6]);
                        break;
                    case "F8":
                        Console.WriteLine("Assigning score to {0}", targetsSheetArray[7]);
                        break;
                    case "F9":
                        Console.WriteLine("Assigning score to {0}", targetsSheetArray[8]);
                        break;
                    case "F10":
                        Console.WriteLine("Assigning score to {0}", targetsSheetArray[9]);
                        break;
                        // Not working
                    case "F11":
                        Console.WriteLine("Assigning score to {0}", targetsSheetArray[10]);
                        break;
                    case "F12":
                        Console.WriteLine("Assigning score to {0}", targetsSheetArray[11]);
                        break;
                    case "C":
                        Console.WriteLine("Assigning score to {0}", targetsSheetArray[12]);
                        break;
                    default:
                        //TODO
                        break;
                }
            }
            while (input.Key != ConsoleKey.Enter);
        }

按下 F11 不会触发 'F11' 情况,而是会使控制台全屏。如何关闭这个“功能”?我可以修改我的控制台应用程序或调整操作系统(Windows 10)。类似的问题已经有了,但没有答案(在此处)。

请添加一个标签,指明你正在使用的编程语言。 - Keith Thompson
3个回答

3
按下F11不会触发'F11'案例,而是控制台会全屏。如何关闭这个“功能”? 您可以通过编辑注册表键来禁用“全屏”功能: 在cmd提示符中键入“regedit”,进入HKEY_CURRENT_USER-> Console,将ForceV2值从'1'更改为'0'。

1
要禁用Windows截取F11键(否则会切换全屏),请调用SetConsoleMode并传递模式标志,其中ENABLE_PROCESSED_INPUT位被清除:
DWORD previousMode; // typically(?) 0x1f7
GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), &previousMode);
auto newMode = previousMode & (~ENABLE_PROCESSED_INPUT);
SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), newMode); 

然后,按下 F1 导致 _getch 返回 224,随后是 133,就像你期望的那样,而窗口不会全屏。

同样地,对于 .NET

    const int STD_INPUT_HANDLE = -10;

    [DllImport("kernel32.dll", SetLastError = true)]
    static extern IntPtr GetStdHandle(int nStdHandle);

    [DllImport("kernel32.dll")]
    static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode);

    [DllImport("kernel32.dll")]
    static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode);


    var handle = GetStdHandle(STD_INPUT_HANDLE);
    GetConsoleMode(handle, out var previousMode);

    var newMode = previousMode & (~ENABLE_PROCESSED_INPUT);
    
    SetConsoleMode(handle, newMode);

0

我想要补充一下@Jackie提供的关于HKEY_CURRENT_USER>Console>ForceV2背后隐藏了什么的答案。

看起来将这个值从1改为0将会默认在由控制台主机(支持所有字符模式应用程序,包括Windows命令提示符、Windows PowerShell提示符和其他应用程序的底层代码)管理的所有窗口中激活“传统控制台模式”。

我不知道这种模式的所有细节,但它将避免这些窗口被自由调整大小,F11键也无法将窗口全屏。

可以通过在控制台窗口的标题栏上右键单击并勾选相关框来直接访问“传统控制台模式”。

传统控制台模式复选框

有关更多详细信息,请参阅以下链接:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接