2011-10-20 16 views
0

Windowsシリアルポートから読み込むためにWin32 ReadFileを呼び出しています。私のデバイスが接続されていない場合、ReadFileはまだ成功を返します。デバイスへの接続が失われているかどうかを確認するにはどうすればよいですか?私はメッセージを送信し、応答を得ない、またはデバイスイベントを聞くことでこれを行うことができますが、それ以上の簡単な方法はありますか?Windowsでデバイスのプラグが抜かれたために既存のシリアル接続が失われているかどうかを検出します。

+0

DSRハードウェア信号を確認してください。 –

答えて

2

シリアルポートは、シリアルポートに何かが接続されているか接続されていないかをデバイスに依存しない方法で知ることができないという点でダムです。このため、シリアルポートを使用するほとんどのデバイスは、何らかの通信プロトコルをサポートしています。これにより、何かが接続されているかどうかを判断できます。

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 

から

をしようと、さらにシステムから追加または削除されたものを絞り込みます。 しかし、デバイスが接続されていない状態でマシンが起動された可能性はほとんどありません。

どちらの方法でも、私はすべての通信プロトコルで、適切な通信エラーの引き渡しが不可欠であることをお勧めします。接続されているかどうかを確認する際にソケットが切断されたことを保証できないという事実に似ています。

関連する問題