首页 > 解决方案 > 从 C++ 禁用控制台的快速编辑模式

问题描述

我试图通过我的 c++ 程序禁用控制台的快速编辑模式,因为在我的应用程序中我不想要任何选择。我也不想要任何暂停,因为当有人点击此模式时,它会暂停游戏。我查看了在线和一些文档,但我不知道我做错了什么。我首先尝试了另一个关于堆栈溢出问题的代码,但它不起作用。

#include<conio.h>
#include<iostream>
#include<windows.h>
using namespace std;


int main(){
    HANDLE hInput;
    DWORD prev_mode;
    GetConsoleMode(hInput, &prev_mode); 
    SetConsoleMode(hInput, prev_mode & ~ENABLE_QUICK_EDIT_MODE);

    cout<<"The quick edit mode stopped now press any key to re enable it"<<endl;
    _getch();
    SetConsoleMode(hInput, prev_mode);
    cout<<"Quick edit mode reenabled click any key to exit";
    _getch();
    return 0;
}

然后我查找了这个文档,他们发现了类似的东西SetConsoleMode

该标志使用户能够使用鼠标来选择和编辑文本。

要启用此模式,请使用 ENABLE_QUICK_EDIT_MODE | ENABLE_EXTENDED_FLAGS。要禁用此模式,请使用不带此标志的 ENABLE_EXTENDED_FLAGS。

然后我再次替换~ENABLE_QUICK_EDIT_MODEENABLE_EXTENDED_FLAGS相同的结果,我想知道我做错了什么。我想禁用快速编辑模式。

标签: c++windowsconsole

解决方案


代码中有一个非常愚蠢的错误。代码的问题hInput HANDLE是没有初始化,STD_INPUT_HANDLE因此该方法SetConsoleMode不起作用。工作代码如下。

#include<conio.h>
#include<iostream>
#include<windows.h>
using namespace std;


int main(){
    HANDLE hInput;
    DWORD prev_mode;
    hInput = GetStdHandle(STD_INPUT_HANDLE);
    GetConsoleMode(hInput, &prev_mode); 
    SetConsoleMode(hInput, prev_mode & ENABLE_EXTENDED_FLAGS);
    cout<<"The quick edit mode stopped now press any key to re enable it"<<endl;
    _getch();
    SetConsoleMode(hInput, prev_mode);
    cout<<"Quick edit mode reenabled click any key to exit";
    _getch();
    return 0;
}

推荐阅读