【问题标题】:disable quick edit mode for console from c++从 C++ 禁用控制台的快速编辑模式
【发布时间】:2019-04-03 14:20:38
【问题描述】:

我试图通过我的 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_EXTENDED_FLAGS 替换了~ENABLE_QUICK_EDIT_MODE 和同样的结果我想知道我做错了什么。 我想禁用快速编辑模式。

【问题讨论】:

    标签: c++ windows console


    【解决方案1】:

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

    【讨论】:

    • 您正在清除所有其他标志。你想要这个:ENABLE_EXTENDED_FLAGS | (prev_mode &amp; ~ENABLE_QUICK_EDIT_MODE)。启用快速编辑模式时可能会禁用扩展标志(例如,如果在之前的调用中将模式设置为 7),因此我们必须明确包含 ENABLE_EXTENDED_FLAGS
    • 另外,请记住在您的实际代码中检查错误。标准 I/O 有可能被重定向到管道或磁盘文件,所以不能盲目假设GetConsoleMode_getch 等控制台功能会成功。您需要非控制台 I/O 的后备。
    • 谢谢你。它解决了我在命令行中测试的一个问题。
    猜你喜欢
    • 2020-07-08
    • 2012-11-19
    • 2016-09-26
    • 2012-10-22
    • 2015-09-01
    • 2023-03-19
    • 2014-03-15
    • 1970-01-01
    • 2017-11-09
    相关资源
    最近更新 更多