關閉控制檯滑鼠點選後除錯資訊阻塞的問題,附C#程式碼
在Win10下控制檯輸出除錯資訊的時候,常常碰到滑鼠左鍵點選後除錯資訊不再輸出的問題。
如下圖所示,滑鼠點選位置有個白色窄框。
不太清楚其他Windows系統是否也有此現象, 有人說是Win10系統的一個bug。但我覺得這是一個除錯的好幫手啊, 除錯資訊突突突奔湧根本看不清楚,這個時候滑鼠點選下就可以暫停下來,然後慢慢看不是很爽? 這比再開啟日誌檔案大面積查詢更快速定位問題吧。
這裡實際是控制檯預設啟用了“快速編輯”模式,不明白“快速編輯”模式可以參看這個:cmd命令列的插入模式和快速編輯模式
可以點選控制檯左上角開啟"屬性"對話方塊,選項,編輯選項,去掉勾選"快速編輯",儲存。此後,就不會發生這種除錯資訊輸出阻塞現象啦。
一般情況下,服務程式釋出時可以使用如下程式碼關閉預設快速編輯功能。
`
//關閉cmd視窗預設為快速編輯(quick edit),解決控制檯程式,滑鼠點選暫停執行
//關閉此模式後,滑鼠點選也不會進入快速編輯模式(即除錯資訊不會暫停輸出)
const int STD_INPUT_HANDLE = -10;
const uint ENABLE_QUICK_EDIT_MODE = 0x0040;
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern IntPtr GetStdHandle(int hConsoleHandle);
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint mode);
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint mode);
///
/// 關閉Console快速編輯模式
///
public static void DisbleQuickEditMode()
{
IntPtr hStdin = GetStdHandle(STD_INPUT_HANDLE);
uint mode;
GetConsoleMode(hStdin, out mode);
mode &= ~ENABLE_QUICK_EDIT_MODE;
SetConsoleMode(hStdin, mode);
}
`