从C ++禁用控制台的快速编辑模式

时间:2019-04-03 14:20:39

标签: c++ windows console

我正在尝试通过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;
}

然后我抬起头来this documentation,他们为SetConsoleMode找到了类似的东西。

  

此标志使用户可以使用鼠标来选择和编辑文本。

     

要启用此模式,请使用ENABLE_QUICK_EDIT_MODE |   ENABLE_EXTENDED_FLAGS。要禁用此模式,请使用ENABLE_EXTENDED_FLAGS   没有此标志。

然后,我用~ENABLE_QUICK_EDIT_MODE替换了ENABLE_EXTENDED_FLAGS,同样的结果我想知道我在做什么错。 我想禁用快速编辑模式。

1 个答案:

答案 0 :(得分:0)

代码中有一个非常愚蠢的错误。代码的问题在于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;
}