C++builder分室

 皆さんのお力をかりて、BCBのTips集を作成したいと考えております。
BCBのプログラミングの部品としてつかえるKnowHowを提供ください。
尚、ここに公開するソースは、gnu宣言に則り良識元に使われることを
願っております。
協力者である、mmyさんに感謝をこめて。

追伸、ネタ&感想を募集しております。
掲示板にてよろしくお願いします。

  1. COMポートの使用可/不可を調べる関数 <初2000/04/06><訂2000/04/21><訂2000/04/28>
  2. WINDOWSのバージョンを調べる関数 <初2000/04/06>


COMポートの使用可/不可を調べる関数
// COMポートの有効無効を調べる
// true が返れば、使用可能
// false が返れば、使用不可
bool check_com(int com)
{
    HANDLE hCom;
    String mes;

    mes = "COM" + IntToStr(com);
    if ((hCom=CreateFile (mes.c_str(), GENERIC_READ|GENERIC_WRITE,
			  0, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE) {
        return false;
    }
    else {
        CloseHandle(hCom);
        return true;
    }
}

WINDOWSのバージョンを調べる関数
// OS バージョン取得
// 詳細はWIN32ヘルプの GetVersionEx(&info) を参照下さい
int Get_OS_Ver(String &OS_ver)
{
    int ret;
    OSVERSIONINFO info;
    info.dwOSVersionInfoSize = sizeof (info);
    GetVersionEx(&info);

    OS_ver = "";
    switch (info.dwPlatformId) {
    case VER_PLATFORM_WIN32s:
         ret = 32;
         OS_Ver = "Win32s";
         break;
    case VER_PLATFORM_WIN32_WINDOWS:
         if (info.dwMinorVersion == 10)
             ret = 98;
             OS_Ver = "Windows 98";
         else
             ret = 95;
             OS_Ver = "Windows 95";
         break;
    case VER_PLATFORM_WIN32_NT:
         ret = 40;
         OS_Ver = "Windows NT";
         break;
    default:
         ret = -1;
         OS_Ver = "不明";
    }

    // バージョン
    OS_Ver = OS_Ver + String((int)info.dwMajorVersion) + "."
                    + String((int)info.dwMinorVersion);
    // ビルド
    OS_Ver = OS_Ver + " " + String((int)(info.dwBuildNumber & 0xFFFF));
    // システム
    OS_Ver = OS_Ver + " " + info.szCSDVersion;
    return ret;
}