我目前在舊的32位架構(gòu)窗口中使用以下代碼: [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)我知道,嘗試讓應(yīng)用程序在64位機(jī)器中運(yùn)行,但我得到這個(gè)錯(cuò)誤:Type: System.IO.IOExceptionMessage: Console setup error - failed to retrieve current ConsoleMode我用谷歌搜索并檢查了64位窗口上的dll是否也被命名為kernel32.dll。我在這里錯(cuò)過(guò)了什么?
1 回答

慕尼黑8549860
TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊
我不確定假設(shè)控制臺(tái)句柄始終具有0x3的值是一個(gè)好主意,特別是因?yàn)橛幸粋€(gè)Windows API方法來(lái)檢索標(biāo)準(zhǔn)句柄。
當(dāng)作為32位和64位可執(zhí)行文件運(yùn)行時(shí)(在64位Windows上),以下內(nèi)容似乎對(duì)我有用,并且似乎是.NET在內(nèi)部執(zhí)行的操作:
[DllImport("kernel32.dll", SetLastError = true)]
public static extern IntPtr GetStdHandle(int nStdHandle);
var consoleHandle = GetStdHandle(-10); // STD_INPUT_HANDLE
GetConsoleMode(consoleHandle, out var mode);
- 1 回答
- 0 關(guān)注
- 111 瀏覽
添加回答
舉報(bào)
0/150
提交
取消