Win10中的控制台程序會被鼠標單擊暫停運行的解決辦法


一、背景

  最近寫一個實時監控物品服務的控制台程序,發現win10系統中控制台程序會因為鼠標單擊導致程序不繼續執行,需要點擊回車enter才能繼續執行,有時會影響程序功能,在網上找到一些資料才發現是win10一個bug,網上有很多人遇到同樣的問題。

二、原因

   Win10控制台程序打印輸出信息過程中,如果使用鼠標左鍵點擊控制台,則控制台進入“快速編輯模式”,此時會阻塞主線程,停止打印輸出,此時點擊鼠標右鍵或者按“Enter”鍵即可取消該模式。但是,取消后,控制台不在打印調試信息。

三、解決方法

1.第一種方法:

在實時監控物品服務的控制台程序,右鍵單擊頂部白框,選擇屬性或默認值

去掉勾選"快速編輯模型",點擊確定

 

 2. 第二種方法:

用C#關閉Console application的quick edit模式

  #region 關閉Console application的quick edit模式
        //關閉 cmd 窗口默認為快速編輯(quickedit),解決控制台程序,鼠標點擊暫停運行

        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);


        public static void DisbleQuickEditMode()
        {
            IntPtr hStdin = GetStdHandle(STD_INPUT_HANDLE);
            uint mode;
            GetConsoleMode(hStdin, out mode);
            mode &= ~ENABLE_QUICK_EDIT_MODE;
            SetConsoleMode(hStdin, mode);

        }
        #endregion
      static void Main(string[] args)
        {
            DisbleQuickEditMode();
         } 

四、參考資料

C#關閉Console application的quick edit模式:https://blog.csdn.net/blizzardlyk/article/details/44810015

手動解決方法:https://blog.csdn.net/qingyang8513/article/details/88865955

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM