我需要在Windows控制台中禁用用户鼠标选择。这是否可能?如何实现?我尝试使用函数SetConsoleMode()
来禁用鼠标输入,但它并没有像我预期的那样起作用。选择仍然是可能的。
我需要在Windows控制台中禁用用户鼠标选择。这是否可能?如何实现?我尝试使用函数SetConsoleMode()
来禁用鼠标输入,但它并没有像我预期的那样起作用。选择仍然是可能的。
控制台的快速编辑模式允许用户使用鼠标快速选择和复制文本,无需首先进入标记模式(即Ctrl+M,或在菜单上选择“编辑” -> “标记”)。启用快速编辑模式通常很方便,但它会干扰鼠标输入。您可以使用控制台输入缓冲区的句柄来禁用它,方法如下:
DWORD prev_mode;
GetConsoleMode(hInput, &prev_mode);
SetConsoleMode(hInput, ENABLE_EXTENDED_FLAGS |
(prev_mode & ~ENABLE_QUICK_EDIT_MODE));
记得在退出时恢复之前的模式。
SetConsoleMode(hInput, ENABLE_EXTENDED_FLAGS)
,它将禁用所有输入模式。顺便说一下,AllocConsole
分配并附加到控制台。不要调用 AttachConsole
;该调用可能会失败,因为进程已经附加到一个控制台。 - Eryk SunGetStdHandle(STD_INPUT_HANDLE)
。如果该句柄导致GetConsoleMode
失败并显示ERROR_INVALID_HANDLE
错误,那么你可以回退到打开"CONIN$"。顺便提一下,如果控制台有窗口的话,GetConsoleWindow
会返回控制台窗口的句柄,但也可能没有窗口。窗口句柄指的是窗口管理器中的窗口对象,而不是内核中的文件对象。 - Eryk Sun
SetConsoleMode()
只能控制程序是否可以读取鼠标事件。我不知道通过API调用是否可以控制控制台的剪切和复制操作,即使可以,我怀疑它可能会因Windows版本而异。 - Kevin Boone