シリアルポート/パイプが開けなかった時のメッセージ強化。 Ticket: #36630
以下のエラーは起き易いので、専用のメッセージを表示する。
・ERROR_FILE_NOT_FOUND(0x02)
・ERROR_ACCESS_DENIED(0x05)
他のエラーはエラーコードを表示する。
他にも頻発するようなエラーがあった場合は別途専用メッセージを追加する。
@@ -44,6 +44,7 @@ | ||
44 | 44 | <ul> |
45 | 45 | <li>added the <a href="../setup/teraterm-misc.html#LogTimestampUTC">LogTimestampUTC</a> entry in the teraterm.ini file. The default is off.</li> |
46 | 46 | </ul></li> |
47 | + <!-- li>シリアルポートおよび名前付きパイプが開けなかった時、エラーメッセージで理由やエラーコードを表示するようにした。</li --> | |
47 | 48 | <li>added the <a href="../macro/command/sendlnmulticast.html">sendlnmulticast</a> command.</li> |
48 | 49 | </ul> |
49 | 50 | </li> |
@@ -44,6 +44,7 @@ | ||
44 | 44 | <ul> |
45 | 45 | <li>teraterm.ini に <a href="../setup/teraterm-misc.html#LogTimestampUTC">LogTimestampUTC</a> エントリを追加した。デフォルトはoff。</li> |
46 | 46 | </ul></li> |
47 | + <li>シリアルポートおよび名前付きパイプが開けなかった時、エラーメッセージで理由やエラーコードを表示するようにした。</li> | |
47 | 48 | <li><a href="../macro/command/sendlnmulticast.html">sendlnmulticast</a> マクロコマンドを追加した。</li> |
48 | 49 | </ul> |
49 | 50 | </li> |
@@ -447,14 +447,26 @@ | ||
447 | 447 | strncpy_s(ErrMsg, sizeof(ErrMsg),P, _TRUNCATE); |
448 | 448 | strncpy_s(P, sizeof(P),"\\\\.\\", _TRUNCATE); |
449 | 449 | strncat_s(P, sizeof(P),ErrMsg, _TRUNCATE); |
450 | - cv->ComID = | |
451 | - PCreateFile(P,GENERIC_READ | GENERIC_WRITE, | |
452 | - 0,NULL,OPEN_EXISTING, | |
453 | - FILE_FLAG_OVERLAPPED,NULL); | |
450 | + cv->ComID = PCreateFile(P, GENERIC_READ | GENERIC_WRITE, 0, NULL, | |
451 | + OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); | |
454 | 452 | if (cv->ComID == INVALID_HANDLE_VALUE ) { |
455 | - get_lang_msg("MSG_CANTOPEN_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open %s", ts->UILanguageFile); | |
456 | - _snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, ts->UIMsg, &P[4]); | |
453 | + DWORD err = GetLastError(); | |
457 | 454 | |
455 | + switch (err) { | |
456 | + case ERROR_FILE_NOT_FOUND: | |
457 | + get_lang_msg("MSG_CANTOPEN_ERROR_NOTFOUND", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open %s. Not found.", ts->UILanguageFile); | |
458 | + _snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, ts->UIMsg, &P[4]); | |
459 | + break; | |
460 | + case ERROR_ACCESS_DENIED: | |
461 | + get_lang_msg("MSG_CANTOPEN_ERROR_DENIED", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open %s. Access denied.", ts->UILanguageFile); | |
462 | + _snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, ts->UIMsg, &P[4]); | |
463 | + break; | |
464 | + default: | |
465 | + get_lang_msg("MSG_CANTOPEN_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open %s. (0x%08x)", ts->UILanguageFile); | |
466 | + _snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, ts->UIMsg, &P[4], err); | |
467 | + break; | |
468 | + } | |
469 | + | |
458 | 470 | if (cv->NoMsg==0) { |
459 | 471 | get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile); |
460 | 472 | MessageBox(cv->HWin,ErrMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION); |
@@ -480,8 +492,7 @@ | ||
480 | 492 | case IdFile: |
481 | 493 | InitFileIO(IdFile); /* TTPLUG */ |
482 | 494 | TTXOpenFile(); /* TTPLUG */ |
483 | - cv->ComID = PCreateFile(ts->HostName,GENERIC_READ,0,NULL, | |
484 | - OPEN_EXISTING,0,NULL); | |
495 | + cv->ComID = PCreateFile(ts->HostName, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); | |
485 | 496 | InvalidHost = (cv->ComID == INVALID_HANDLE_VALUE); |
486 | 497 | if (InvalidHost) { |
487 | 498 | if (cv->NoMsg==0) { |
@@ -517,15 +528,27 @@ | ||
517 | 528 | break; |
518 | 529 | } |
519 | 530 | |
520 | - cv->ComID = | |
521 | - PCreateFile(P,GENERIC_READ | GENERIC_WRITE, | |
522 | - 0,NULL,OPEN_EXISTING, | |
523 | - 0, // ブロッキングモードにする(FILE_FLAG_OVERLAPPED は指定しない) | |
524 | - NULL); | |
531 | + cv->ComID = PCreateFile(P, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, | |
532 | + 0, // ブロッキングモードにする(FILE_FLAG_OVERLAPPED は指定しない) | |
533 | + NULL); | |
525 | 534 | if (cv->ComID == INVALID_HANDLE_VALUE ) { |
526 | - get_lang_msg("MSG_CANTOPEN_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open %s", ts->UILanguageFile); | |
527 | - _snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, ts->UIMsg, &P[4]); | |
535 | + DWORD err = GetLastError(); | |
528 | 536 | |
537 | + switch (err) { | |
538 | + case ERROR_FILE_NOT_FOUND: | |
539 | + get_lang_msg("MSG_CANTOPEN_ERROR_NOTFOUND", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open %s. Not found.", ts->UILanguageFile); | |
540 | + _snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, ts->UIMsg, &P[4]); | |
541 | + break; | |
542 | + case ERROR_ACCESS_DENIED: | |
543 | + get_lang_msg("MSG_CANTOPEN_ERROR_DENIED", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open %s. Access denied.", ts->UILanguageFile); | |
544 | + _snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, ts->UIMsg, &P[4]); | |
545 | + break; | |
546 | + default: | |
547 | + get_lang_msg("MSG_CANTOPEN_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open %s. (0x%08x)", ts->UILanguageFile); | |
548 | + _snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, ts->UIMsg, &P[4], err); | |
549 | + break; | |
550 | + } | |
551 | + | |
529 | 552 | if (cv->NoMsg==0) { |
530 | 553 | get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile); |
531 | 554 | MessageBox(cv->HWin,ErrMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION); |