在 64 位中禁用 QuickEditMode

Disable QuickEditMode in 64 bit

我目前在旧的 32 位架构中使用以下代码 windows:

    [DllImport("kernel32.dll", EntryPoint = "SetConsoleMode", ExactSpelling = true, SetLastError = true, CharSet = CharSet.Unicode)]
    public static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint mode);
    [DllImport("kernel32.dll", EntryPoint = "GetConsoleMode", ExactSpelling = true, SetLastError = true, CharSet = CharSet.Unicode)]
    public static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode);
    [DllImport("user32.dll")]
    public static extern bool EnableMenuItem(IntPtr hConsoleHandle, uint uIDEnableItem, uint uEnable);
    [DllImport("user32.dll")]
    public static extern IntPtr GetSystemMenu(IntPtr hSystemMenu, bool bRevert);
    [DllImport("user32.dll")]
    public static extern IntPtr RemoveMenu(IntPtr hSystemMenu, uint nPosition, uint wFlags);

这是使用 GetConsoleMode 和 SetConsoleMode 的代码:

if (!GetConsoleMode(consoleHandle, out consoleMode))
                throw new IOException("Console setup error - failed to retrieve current ConsoleMode");
consoleMode &= ~Constants.ENABLE_QUICK_EDIT_MODE;
Constants.SetConsoleMode(consoleHandle, consoleMode)

我知道,尝试在 64 位机器中获取应用程序 运行,但我收到此错误:

Type: System.IO.IOException
Message: Console setup error - failed to retrieve current ConsoleMode

我用谷歌搜索并检查了 64 位 windows 上的 dll 也被命名为 kernel32.dll。我在这里遗漏了什么?

我不确定假设控制台句柄的值始终为 0x3 是个好主意,尤其是因为有 Windows API 方法来检索标准句柄。

当 运行 同时作为 32 位和 64 位可执行文件(在 64 位 Windows 上)时,以下内容似乎对我有用,并且似乎是 .NET 在内部执行此操作的方式:

[DllImport("kernel32.dll", SetLastError = true)]
public static extern IntPtr GetStdHandle(int nStdHandle);

var consoleHandle = GetStdHandle(-10); // STD_INPUT_HANDLE
GetConsoleMode(consoleHandle, out var mode);