是否可以在我的C#app中禁用System.Console XOFF / XON流控制处理?

时间:2014-10-18 05:22:23

标签: c# .net windows remote-desktop windows-console

我是基于控制台的服务器软件的开发人员,在按下Enter之前,有时似乎会锁定输入。我怀疑这是System.Console窗口中的XOFF / XON(Ctrl-S / Ctrl-Q流控制)处理。

是否可以(使用.NET调用或Win32 API函数)在使用System.Console输出和输入命令的C#/ .NET应用程序中禁用XOFF / XON流控制处理? (这也影响其他系统控制台,如CMD.EXE窗口,但我不关心这些情况。)我的应用程序是服务器软件;不会想要一个冻结控制台的钥匙,特别是那个可能会被意外触发的钥匙。

不知怎的,我相信我的服务器应用程序的控制台正在输入一个Ctrl-S,或者当输入S时,可能认为按下了限定符。控制台锁定,直到我按Enter键。 (我认为Ctrl-Q也会释放它,但还没有机会再测试它。)

我的进程是.NET上的C#服务器,这些是在运行Windows Server的Hyper-V VM上使用System.Console.ReadLine()的控制台。

这可能对问题原因至关重要:我通过远程桌面(RDP)连接到Hyper-V主机。一个想法是RDP断开连接失去一个Ctrl键,然后下一个' S'输入(由我们的命令自动化软件)锁定终端。我们最终用基于网络的命令输入取而代之,但与此同时我们正在解决这个问题,需要员工进行人工干预才能让服务器再次运行。

更多信息:我试过以下内容,以防由平板电脑的RDP会话触发快速编辑模式,但这并没有阻止锁定:

        GetConsoleMode(handle, out oldmode);

        int newmode = oldmode;
        newmode |= ENABLE_EXTENDED_FLAGS;   // required to disable the next two
        newmode &= ~ENABLE_QUICK_EDIT_MODE; // force this OFF
        newmode &= ~ENABLE_MOUSE_INPUT;     // force this OFF
        newmode &= ~ENABLE_WINDOW_INPUT;    // force this OFF
        newmode |= ENABLE_INSERT_MODE;      // force this ON
        if (newmode != oldmode)
        {
            SetConsoleMode(handle, newmode);

0 个答案:

没有答案