C#控制台应用程序GetConsoleMode错误代码6

C#控制台应用程序GetConsoleMode错误代码6,c#,console-application,C#,Console Application,我有一个控制台游戏,我想禁用鼠标输入。我从第页获得了代码,但当我尝试运行它时,GetConsoleMode函数失败,错误代码为6,代表“无效句柄” 所以我的问题是:为什么GetConsoleWindow()方法返回一个无效的控制台句柄 这里是我的源代码: private static void DisableMouseInput() { IntPtr consoleHandle = GetConsoleWindow(); uint consoleMode; Consol

我有一个控制台游戏,我想禁用鼠标输入。我从第页获得了代码,但当我尝试运行它时,GetConsoleMode函数失败,错误代码为6,代表“无效句柄”

所以我的问题是:为什么GetConsoleWindow()方法返回一个无效的控制台句柄

这里是我的源代码:

private static void DisableMouseInput()
{
    IntPtr consoleHandle = GetConsoleWindow();
    uint consoleMode;

    Console.WriteLine(Marshal.GetLastWin32Error());         // get current console mode
    if (!GetConsoleMode(consoleHandle, out consoleMode))
    {
        // Error: Unable to get console mode.
        Console.WriteLine(Marshal.GetLastWin32Error());
        throw new Exception();
        return;
    }
     // Clear the mouse input bit in the mode flags
    consoleMode = consoleMode & 0xffbf; //0xffef = ~0x0040 = ~ENABLE_QUICK_EDIT
    // set the new mode
    if (!SetConsoleMode(consoleHandle, consoleMode))
    {
        // ERROR: Unable to set console mode
    }
}

您是否尝试了另一种方式来获取
控制台句柄
? 例如:

const int STD_INPUT_HANDLE = -10;

[DllImport("kernel32.dll"]
static extern IntPtr GetStdHandle(int nStdHandle);

private static foo() {
  IntPtr consoleHandle = GetStdHandle(STD_INPUT_HANDLE);
  ....
}

您是否尝试了另一种方式来获取
控制台句柄
? 例如:

const int STD_INPUT_HANDLE = -10;

[DllImport("kernel32.dll"]
static extern IntPtr GetStdHandle(int nStdHandle);

private static foo() {
  IntPtr consoleHandle = GetStdHandle(STD_INPUT_HANDLE);
  ....
}