none
偵測裝置管理員中的連接埠事件 RRS feed

  • 問題

  • 小弟在測試設備的時候,會用一條miniUSB->A type的線來連接PC與待測設備,當接上時,會在「裝置管理員」的「連接埠( COM和LPT)」中顯示一些COM PORT(如:COM21,COM22,COM23,...)

    如果想要手動找出列表,可以使用下列方法來列舉裝置管理員的項目:

            private bool isEhsAvailable()
            {
                bool result = false;
                ManagementScope scope = new ManagementScope("\\\\.\\ROOT\\cimv2");
                //ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_PnPEntity");
                ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_SerialPort");
                //
                ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
                ManagementObjectCollection queryCollection = searcher.Get();
                foreach (ManagementObject Obj in queryCollection)
                {
                    if (Obj["Name"] != null)
                    {
                        this.rtxt_j30_monitor.Text += Obj["Name"].ToString() + "\r\n";
                    }
                }
                return result;
            }

    但我想只監聽連接埠變化時的事件,找了一下發現有個ManagementEventWatcher可用(當然下面的做法不會動...)

                managementEventWatcher = new ManagementEventWatcher("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2");
    
                managementEventWatcher.Start();
                managementEventWatcher.EventArrived += new EventArrivedEventHandler(managementEventWatcher_EventArrived);
                updateDelegate = new UpdateListBoxDelegate(UpdateListBox);

    想請教一下,像Win32_DeviceChangeEvent這種table名稱,在哪邊有列表可以查啊?

    關於監聽通訊埠變化這種事件,不知道各位先進能不能提供一些可能的做法或是相關資料?

    請各位先進不吝指導






    zeus

    2015年4月1日 上午 05:02

解答

  • Detect serial port insertion/removal

    有試過這篇解法嗎 ?


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 宙斯 2015年4月2日 上午 03:56
    2015年4月1日 上午 08:32
    版主

所有回覆

  • 有種東西叫GOOGLE SEARCH, 你有試過嗎?


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2015年4月1日 上午 05:48
  • 那個問題我列得可能不太好,我想問的是有沒有class是能夠偵測COM PORT的變化的(由WMI Classes)

    Win32_DeviceChangeEvent我測試時沒有抓到comport變化

    另外我試著在WndProc中抓WM_DEVICECHANGE,發現隨身碟類型的插拔可以觸發,但是COM PORT的產生和消失不會觸發

    ManagementEventWatcher的用法,是從您的教學改來測試的,但以前沒接觸過這種類型的操作,還在找相關資料


    zeus

    2015年4月1日 上午 06:33
  • Detect serial port insertion/removal

    有試過這篇解法嗎 ?


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 宙斯 2015年4月2日 上午 03:56
    2015年4月1日 上午 08:32
    版主
  • 感謝您的回覆

    我試了一下,用上面的解法時,如果是一般的FTDI或PL2303的轉換線,那是抓得到的 (在裝置管理員的名稱是USB Serial Port)

    但我用miniUSB插到設備上時,一樣會在  連接埠( COM和LPT)  中顯示,但是無法抓到

    看起來是因為兩者產生COMPORT的方式不同的關係,如下面兩張圖所示:

    其實現在我可以自己查詢拿到裝置管理員的內容,只是如果能夠抓到變化的事件會更好,如果抓不到的話,暫時就用定時query的方式解決好了


    zeus

    2015年4月2日 上午 02:22