svnno****@sourc*****
svnno****@sourc*****
2015年 12月 21日 (月) 20:56:58 JST
Revision: 6217 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/6217 Author: maya Date: 2015-12-21 20:56:58 +0900 (Mon, 21 Dec 2015) Log Message: ----------- シリアルポート脱着時の自動切断・再接続をリファクタリング COMポートをチェックにし行くデバイスタイプを限定 デバイス削除時と追加時の処理を分離した Modified Paths: -------------- trunk/teraterm/teraterm/vtwin.cpp -------------- next part -------------- Modified: trunk/teraterm/teraterm/vtwin.cpp =================================================================== --- trunk/teraterm/teraterm/vtwin.cpp 2015-12-20 15:16:40 UTC (rev 6216) +++ trunk/teraterm/teraterm/vtwin.cpp 2015-12-21 11:56:58 UTC (rev 6217) @@ -3115,22 +3115,21 @@ BOOL CVTWindow::OnDeviceChange(UINT nEventType, DWORD_PTR dwData) { - if (nEventType == DBT_DEVICEARRIVAL || nEventType == DBT_DEVICEREMOVECOMPLETE) { - if (ts.PortType == IdSerial) { - if (!ts.AutoComPortReconnect) { - return CFrameWnd::OnDeviceChange(nEventType, dwData); - } + PDEV_BROADCAST_PORT pDevPort; - if (cv.Open != 0) { - /* \x90ڑ\xB1\x92\x86 */ - if (AutoDisconnectedPort == -1 && CheckComPort(cv.ComPort) == 0) { - AutoDisconnectedPort = cv.ComPort; - Disconnect(TRUE); - } - } - else { - /* \x96\xA2\x90ڑ\xB1 */ - if (AutoDisconnectedPort == ts.ComPort && CheckComPort(ts.ComPort) == 1) { + pDevPort = (PDEV_BROADCAST_PORT)dwData; + + switch (nEventType) { + case DBT_DEVICEARRIVAL: + //OutputDebugPrintf("DBT_DEVICEARRIVAL %d\n", pDevPort->dbcp_devicetype); + if (pDevPort->dbcp_devicetype == DBT_DEVTYP_PORT && + ts.PortType == IdSerial && + ts.AutoComPortReconnect && + AutoDisconnectedPort == ts.ComPort) { + if (!cv.Open) { + /* Tera Term \x96\xA2\x90ڑ\xB1 */ + if (CheckComPort(ts.ComPort) == 1) { + /* \x83|\x81[\x83g\x82\xAA\x97L\x8C\xF8 */ AutoDisconnectedPort = -1; Connecting = TRUE; ChangeTitle(); @@ -3138,7 +3137,25 @@ } } } + break; + case DBT_DEVICEREMOVECOMPLETE: + //OutputDebugPrintf("DBT_DEVICEREMOVECOMPLETE %d\n", pDevPort->dbcp_devicetype); + if (pDevPort->dbcp_devicetype == DBT_DEVTYP_PORT && + ts.PortType == IdSerial && + ts.AutoComPortReconnect && + AutoDisconnectedPort == -1) { + if (cv.Open) { + /* Tera Term \x90ڑ\xB1\x92\x86 */ + if (CheckComPort(cv.ComPort) == 0) { + /* \x83|\x81[\x83g\x82\xAA\x96\xB3\x8C\xF8 */ + AutoDisconnectedPort = cv.ComPort; + Disconnect(TRUE); + } + } + } + break; } + return CFrameWnd::OnDeviceChange(nEventType, dwData); }