检测是否由于Windows上的设备拔出而导致现有串行连接丢失

时间:2011-10-20 02:19:07

标签: windows serial-port

我正在调用Win32 ReadFile来从Windows串口读取。如果我的设备已拔下,ReadFile仍会返回成功。如何检查与设备的连接是否丢失?我可以通过发送消息而不是获得响应或监听设备事件来做到这一点,但还有更简单的方法吗?

2 个答案:

答案 0 :(得分:2)

串行端口是愚蠢的,因为没有设备独立的方式知道何时插入或未插入串行端口。因此,大多数使用串行端口的设备都支持某种通信协议,这样可以确定是否有连接。

答案 1 :(得分:0)

取决于语言,我不确定串口设备是否会导致设备更改事件,而我目前还没有测试。

但是如果PNP会拿起它,我会尝试

来自WmiCode创建者

Imports System
Imports System.Management
Imports System.Windows.Forms

Namespace WMISample

    Public Class WMIReceiveEvent

        Public Overloads Shared Function Main() As Integer

            Try

                Dim query As New WqlEventQuery( _
                    "SELECT * FROM Win32_DeviceChangeEvent")

                Dim watcher As New ManagementEventWatcher(query)
                Console.WriteLine("Waiting for an event...")

                Dim eventObj As ManagementBaseObject = watcher.WaitForNextEvent()

                Console.WriteLine("{0} event occurred.", eventObj("__CLASS"))

                ' Cancel the event subscription
                watcher.Stop()
                Return 0

            Catch err As ManagementException

                MessageBox.Show("An error occurred while trying to receive an event: " & err.Message)
            End Try
        End Function

    End Class
End Namespace

从那里你可以进一步细化从系统中添加或删除的内容。 但是,在没有连接设备的情况下机器可能已经启动的情况很少。

无论哪种方式,我建议在所有通信协议中,正确的通信错误处理是必不可少的。它类似于以下事实:您无法保证在检查连接和写入之间是否断开套接字。