使用できるCOMポートを検索 <TOP>
使用できるCOMポート(COM1〜COM16)を調べます。
CreateFile ファイルの作成・オープン
CloseHandle オープンしているカーネルオブジェクトのハンドルをクローズ
'================================================================ '= COMポートの存在を調べる '= (ComPort.bas) '================================================================ #include "Windows.bi" Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type ' ファイルの作成・オープン Declare Function Api_CreateFile& Lib "kernel32" Alias "CreateFileA" (ByVal lFileName$, ByVal dDesiredAccess&, ByVal dShareMode&, lSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dCreationDisposition&, ByVal dFlagsAndAttributes&, ByVal hTemplateFile&) ' オープンしているカーネルオブジェクトのハンドルをクローズ Declare Function Api_CloseHandle& Lib "kernel32" Alias "CloseHandle" (ByVal hObject&) #define FILE_SHARE_READ &H1 '他のアプリケーションからの読み込み可能 #define FILE_SHARE_WRITE &H2 '他のアプリケーションから書き込み可能 #define OPEN_EXISTING 3 'ファイルをオープンする #define FILE_ATTRIBUTE_NORMAL &H80 '他のファイル属性を持たない Var Shared List1 As Object Var Shared Button1 As Object List1.Attach GetDlgItem("List1") : List1.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 '================================================================ '= '================================================================ Declare Function ComAvailable(ComNum As Integer) As Integer Function ComAvailable(ComNum As Integer) As Integer Var hCom As Long Var sa As SECURITY_ATTRIBUTES Var Ret As Long 'ComPortを開く hCom = Api_CreateFile("COM" & Trim$(Str$(ComNum)) & "", 0, FILE_SHARE_READ Or FILE_SHARE_WRITE, sa, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0) If hCom = True Then ComAvailable = False 'COMの存在なし Else ComAvailable = True 'COMの存在あり Ret = Api_CloseHandle(hCom) 'ComPortクローズ End If End Function '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var i As Integer For i = 1 To 16 If ComAvailable(i) Then List1.AddString "COM" & Trim$(Str$(i)) & " OK" Else List1.AddString "COM" & Trim$(Str$(i)) & " NG" End If Next End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End