一尘不染

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

c#

我尝试了几种解决方案,例如一种->

http://www.pcreview.co.uk/forums/console-writeline-hangs-if-user-click-into-
console-window-t1412701.html

但是,我观察到对于不同的控制台应用程序,GetConsoleMode(IntPtr hConsoleHandle,out int
mode)中的模式将有所不同。它不是恒定的。

我可以在控制台应用程序上禁用鼠标单击(左右按钮)以实现相同的情况。我发现可以使用IMessageFilter做到这一点,但只能用于Window Form
Application,而不能用于控制台应用程序。

请指导。


阅读 980

收藏
2020-05-19

共1个答案

一尘不染

如果要禁用快速编辑模式,则需要调用GetConsoleMode来获取当前模式。然后清除启用快速编辑的位,然后调用SetConsoleMode。假设您具有非托管函数的托管原型,则应编写:

const int ENABLE_QUICK_EDIT = 0x0040;

IntPtr consoleHandle = GetConsoleWindow();
UInt32 consoleMode;

// get current console mode
if (!GetConsoleMode(consoleHandle, out consoleMode))
{
    // Error: Unable to get console mode.
    return;
}

// Clear the quick edit bit in the mode flags
mode &= ~ENABLE_QUICK_EDIT;

// set the new mode
if (!SetConsoleMode(consoleHandle, consoleMode))
{
    // ERROR: Unable to set console mode
}

如果要禁用鼠标输入,则要清除鼠标输入位。

const int ENABLE_MOUSE_INPUT = 0x0010;

mode &= ~ENABLE_MOUSE_INPUT;
2020-05-19