В настоящее время я использую следующий код в старых окнах 32-битной архитектуры:
[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
Я погуглил и проверил, что dll на 64-битных окнах также называется kernel32.dll .. Чего мне не хватаетздесь