c++ - 从 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_MODE
为ENABLE_EXTENDED_FLAGS
相同的结果,我想知道我做错了什么。我想禁用快速编辑模式。
解决方案
代码中有一个非常愚蠢的错误。代码的问题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;
}
推荐阅读
- php - Woocommerce Bookings - 如何更改购物车中已有的商品元数据?
- appium - Mac 上的 Android 设备无法建立会话,因为错误:套接字挂起
- python - Pandas Dataframe groupby 并按 max(key) 过滤
- c++-winrt - 在 C++/winrt 中注册窗口关闭事件
- sql - 您使用哪些工具来解决运行缓慢的 SQL Server 报告?
- javascript - 将名称重新格式化为姓氏,名字
- android - 设置可见性消失后无法在 EditText 内输入
- c++ - copyfile_state_get 总是显示 0
- java - 在 Hangman.java 中打印遗漏的字母数组
- hadoop - H20 Hadoop 启动