|
plug/unplug は WM_DEVICECHANGE で通知されるのでトップレベルウインドウでハンドルすれば良いんだけど 開いたままのデバイスを強制 unplug したときどう動くかはデバイスドライバの出来次第。 - unplug された状態で既にオープンしているハンドルが正しく Close() できるかどうか - unplug/plug で再度正しく Open() できるかどうか - COMx の番号として同じ値が割り振られるかどうか は、やってみないとわからないっす。
まずは Plug/Unplug の検出をできるようにしてみよう。 C# FormApp なら Form1.WndProc() を override して WM_DEVICECHANGE を受け取ってみよう。 Win32API RegisterDeviceNotificationW() を呼ばずに WM_DEVICECHANGE をハンドルすると DBT_DEVNODES_CHANGED しか受け取れないのでその辺は妥協するか RegisterDeviceNotificationW() を正しく呼んで DBT_DEVICEARRIVAL や DBT_DEVICEREMOVECOMPLETE を受け取れるようにするかはあなた次第。
DBT_DEVICEREMOVECOMPLETE で SerialPort.Close() してみるとか DBT_DEVICEARRIVAL で SerialPort.Open() してみるとか この辺から手を付けてみるとよいかもしんまい。
|