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

Posted

技术标签:

【中文标题】从 C++ 禁用控制台的快速编辑模式【英文标题】:disable quick edit mode for console from 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 和同样的结果我想知道我做错了什么。 我想禁用快速编辑模式。

【问题讨论】:

【参考方案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 的后备。 谢谢你。它解决了我在命令行中测试的一个问题。

以上是关于从 C++ 禁用控制台的快速编辑模式的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式禁用 C# 控制台应用程序的快速编辑模式?

WIN10下命令行禁用编辑模式

使用 rxswift 禁用 UITableViewCell 编辑模式

如何在 QTableView 中禁用编辑模式?

Tableview编辑模式下禁用TextField

在编辑模式下禁用表格视图单元格突出显示的颜色?