どうも!リョクちゃです。
今回は、自身のコンピュータにインストールされているシリアルポートを取得する方法を、
Windowsアプリケーションを作成しながら紹介していきます。
自身のコンピュータにインストールされているシリアルポートは、
デバイスマネージャで確認することができます。
ちなみに前回の記事はこちら
目次
コンピュータにインストールされているシリアルポートの確認
デバイスマネージャを開きます。
Windows10だと、Windowsボタンを右クリック することで
デバイスマネージャを選ぶ画面が立ち上がるので、デバイスマネージャをクリックします。
筆者の環境では、COM3とCOM4がインストールされていました。
準備編
VisualStudio2019を使って、Windowsフォームアプリケーションを作成していきます。
最初の手順については、下記記事をご参照ください。
フォームの作成
以下のようなフォームを作成します。
①~③のコントロールについては以下の表のとおりです。
No | コントロール | 名前 |
---|---|---|
1 | Label | Label1 |
2 | ComboBox | cbxSerialPorts |
3 | Button | btnOk |
各コントロールのフォントは、メイリオの18ptを設定しています。
実行環境
筆者の実行環境は、
- VisualStudio2019
- Windows 10 64bit
- .Net Framework 4.5.1
になります。
※ Windows7 8 8.1でも動作はできますが、画面デザインの表示が変わるかもしれません。
アプリケーションの目的
コンボボックスのプルダウンに自身の環境のCOMポートが表示でき、
選択したCOMポートがOKボタンを押すと、メッセージボックスで
表示されることを目的とします。
動作
動作としては、
- 画面起動時にCOMポート一覧を取得しcbxSerialPortsに追加します。
- cbxSerialPortsのプルダウンを押すことで、一覧が表示される。
- btnOkを押すことで、選択されたCOMポートを表示する。
COMポートが選択されていない場合は、アラートを表示する。
これらができることとします。
プログラム編
実際にプログラムを書いていきます。
シリアルポート一覧の取得
以下の書き方で自身の環境にインストールされているシリアルポートを取得します。
今回はコンボボックスに追加するので、リスト型に変換して事前に変数に渡しておきます。
1 |
Dim lstPorts As List(Of String) = My.Computer.Ports.SerialPortNames.ToList |
SerialPortsNamesの後に、.ToListを付加しています。
こうすることで、取得したシリアルポート一覧をリスト型で渡してくれます。
リスト型については、こちらも参考にしてみてください。
コンボボックスへ追加
コンボボックスへの追加は、以下のコードで行います。
1 2 3 |
For Each port In lstPorts Me.cbxSerialPorts.Items.Add(port) Next port |
とすることでコンボボックスへ項目を追加できます。
コンボボックスについてはこちらも参考にしてみてください。
画面起動時
プログラムが実行され画面がロードされるときに、
先ほどのコードが実行できるようにします。
画面のロードには以下のイベントが使われます。
1 2 3 4 5 6 7 8 9 |
''' <summary> ''' 画面ロード ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub frmSerialPort_Load(sender As Object, e As EventArgs) Handles MyBase.Load End Sub |
この中に、シリアルポート一覧の取得、コンボボックスへの追加を書いていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
''' <summary> ''' 画面ロード ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub frmSerialPort_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' シリアルポート一覧を取得 Dim lstPorts As List(Of String) = My.Computer.Ports.SerialPortNames.ToList ' コンボボックスへ格納 For Each port In lstPorts Me.cbxSerialPorts.Items.Add(port) Next port End Sub |
こんな感じですね。
ボタンが押されたら
OKボタンが押されたらメッセージボックスへコンボボックスで
選択されたシリアルポートを表示します。
ボタンが押されたら発生するイベントは、
でした。
これもデザイナー画面でフォームに配置されたボタンをダブルクリックすることで
コードが自動生成されます。
1 2 3 4 5 6 7 8 |
''' <summary> ''' OKボタン押下時 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnOk_Click(sender As Object, e As EventArgs) Handles btnOk.Click End Sub |
この中にコードを書いていきます。
メッセージボックスについてはこちらの記事を参考にしてみてください。
コンボボックスで選択された値の取得
以下のコードで取得ができます。
※ToStringにしているのは、今回は文字列型で受け取りたいからです。
メッセージボックスの設定
選択された情報を表示する前に、コンボボックスが空白でないかチェックをします。
空白だと、選択されていないとみなし、アラートを通知します。
この条件分岐には、以下のコードを書きます。
1 2 3 4 5 6 |
' コンボボックスの情報が空白でないかチェック If Me.cbxSerialPorts.Text <> "" Then ' メッセージボックスに表示 Else ' 選択されていない End If |
それぞれメッセージボックスのコードを条件分岐後に書きます。
1 2 3 4 5 6 7 8 |
' コンボボックスの情報が空白でないかチェック If Me.cbxSerialPorts.Text <> "" Then ' メッセージボックスに表示 MessageBox.Show(Me.cbxSerialPorts.SelectedItem.ToString, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information) Else ' 選択されていない MessageBox.Show("COMポートが選択されていません。", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) End If |
全体のコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
Public Class frmSerialPort ''' <summary> ''' 画面ロード ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub frmSerialPort_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' シリアルポート一覧を取得 Dim lstPorts As List(Of String) = My.Computer.Ports.SerialPortNames.ToList ' コンボボックスへ格納 For Each port In lstPorts Me.cbxSerialPorts.Items.Add(port) Next port End Sub ''' <summary> ''' OKボタン押下時 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub btnOk_Click(sender As Object, e As EventArgs) Handles btnOk.Click ' コンボボックスの情報が空白でないかチェック If Me.cbxSerialPorts.Text <> "" Then ' メッセージボックスに表示 MessageBox.Show(Me.cbxSerialPorts.SelectedItem.ToString, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information) Else ' 選択されていない MessageBox.Show("COMポートが選択されていません。", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) End If End Sub End Class |
コピペして自身の環境で試すのにご活用ください。
実行編
実際に実行をしていきます。
プログラム起動時
コンボボックスのプルダウンを押した時
選択して、OKボタンを押した時(選択編)
選択して、OKボタンを押した時(未選択編)
まとめ
自身の環境にインストールされているシリアルポート一覧の取得方法について紹介しました。
シリアル通信の際のポート選択のときに、
アプリケーション使用ユーザに選んでもらう際などに有効かと思います。
急なポート変更時にも活用できるのではないでしょうか。
ハードウェアと絡めて記事にしてみようかな。
最後までお読みいただきありがとうございます。
・こちらの書籍を参考にVB.Net勉強しています。