【问题标题】:C# Console Application GetConsoleMode Errorcode 6C# 控制台应用程序 GetConsoleMode 错误代码 6
【发布时间】:2017-07-21 06:24:25
【问题描述】:

我有一个控制台游戏,我想禁用鼠标输入。我从this 页面获得了代码,但是当我尝试运行它时,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
    }
}

【问题讨论】:

    标签: c# console-application


    【解决方案1】:

    您是否尝试过另一种获取consoleHandle 的方法? 例如:

    const int STD_INPUT_HANDLE = -10;
    
    [DllImport("kernel32.dll"]
    static extern IntPtr GetStdHandle(int nStdHandle);
    
    private static foo() {
      IntPtr consoleHandle = GetStdHandle(STD_INPUT_HANDLE);
      ....
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-28
      • 2018-09-09
      • 2022-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      相关资源
      最近更新 更多