从 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 & ~ENABLE_QUICK_EDIT_MODE)
。启用快速编辑模式时可能会禁用扩展标志(例如,如果在之前的调用中将模式设置为 7),因此我们必须明确包含 ENABLE_EXTENDED_FLAGS
。
另外,请记住在您的实际代码中检查错误。标准 I/O 有可能被重定向到管道或磁盘文件,所以不能盲目假设GetConsoleMode
和_getch
等控制台功能会成功。您需要非控制台 I/O 的后备。
谢谢你。它解决了我在命令行中测试的一个问题。以上是关于从 C++ 禁用控制台的快速编辑模式的主要内容,如果未能解决你的问题,请参考以下文章