
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'1番目の方法
Dim Objquery As New Management.ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE MACAddress is not null")
Dim ObjCollection As Management.ManagementObjectCollection = Objquery.Get
Dim Obj As Management.ManagementObject
For Each Obj In ObjCollection
If (CType(Obj("IPEnabled"), Boolean) = True) Then
Label1.Text = Replace(Obj("MacAddress"), ":", "")
End If
Next
'2番目の方法
Dim computerProperties As IPGlobalProperties = IPGlobalProperties.GetIPGlobalProperties()
Dim nics As NetworkInterface() = NetworkInterface.GetAllNetworkInterfaces()
Dim adapter As NetworkInterface
For Each adapter In nics
Label2.Text = adapter.GetPhysicalAddress().ToString()
Exit For
Next adapter
End Sub
いつもお世話になっております。
以上の2種類の方法のどちらかでMACアドレスを取得したいのですが、あいにく知識不足で、どちらの方がより高い確率で取得できるのでしょう。
ちなみにソースを見る限り、IPアドレスなどは複数持つことができるようです。かなりかなり不安です。
お願いいたします。
No.2ベストアンサー
- 回答日時:
詳しいくないので、役に立たない情報かも知れませんが……
> ネットワークの設定が不十分の場合、
物理的に NIC が端末に接続されていたとしても Windows から認識されていない状態と
「無効」としている場合も取得できないと思います。
(ドライバのインストールは完了していて、デバイスとして認識されていても)
> 物理的なものと、もう一つ「MSアダプタ!?」みたい論理的
Visual Basic 2005 で可能な方法でということと、NIC の種別を絞りこむということであれば
下記のようなもの組み合わせれば可能かも知れません。
1. NetworkInterfaceType 見れば Ethernet であると判断できます。
2. Description の値からはデバイスマネージャに出てくるものと同じようなものが得られるので
ある程度は判断の参考にはなるかと思います。
※ 記述例としてはこんな感じ
Label2.Text = adapter.Description
3. MAC アドレスの 24 ビットはベンダIDになっているのでそれで識別するという方法も
ありますが、リストを持っている必要があるのであまり現実的ではないと思われます。
※ 次のようなサイトで検索して探すことも可能ですが……
Vendor/Ethernet MAC Address Lookup and Search
http://www.coffer.com/mac_find/
> 目的は、このパソコンはユニークの個体であるのを判別
※ これは余計なことなのでスルーして頂いてかまいません。
# ソフトウェアの使用制限にでもお使いになるのでしょうか?
# だとしたら、どれを使って登録するかをユーザに選ばせてその条件で
# 登録コードなどを発行するほうが無難ではないでしょうか?
No.1
- 回答日時:
> どちらの方がより高い確率で取得できるのでしょう。
コードからして、おそらく .NET Framework 環境だとは思いますが
個人的には「二番目」のほうが無難かと思います。
読解力不足で申し訳ありませんが、この「より高い確立」とは何を
意味されてのことでしょうか?
このコードで気になるのは次のことです。
# 動作確認のためのコードでこうなっているだけかとは思いますが
※ 引用が前後してしまいますが
> For Each adapter In nics
> Label2.Text = adapter.GetPhysicalAddress().ToString()
> Exit For
NIC が複数存在する場合、最初に見付かった NIC が必ずしも所望の
インターフェースであるとは限らないので、限られた環境(NIC が
一つしかない)の場合以外で運用される場合は避けるべきではない
でしょうか?
この回答への補足
ご回答ありがとうございます。薄識のため、万が一適当なことを言ったらごめんなさい。VB2005です。ちなみに上のソースコードは
System.Managementに参照設定、Imports System.Net.NetworkInformationを追加する必要があります。
>「より高い確立」とは何を意味されてのことでしょうか?
聞いた話ではありますが、ネットワークの設定が不十分の場合、接続中のケーブルの刺し抜きとか、ネットワークアダプタがあっても必ず取得できるとは限らないそうです。(これはWindowsの仕様ですと言う方もいます)
>NIC が複数存在する場合
ここらへんがよく分かりません、一つしかない環境でも物理的なものと、もう一つ「MSアダプタ!?」みたい論理的なものがあって、一つ目だけを取得しようとしたため、このようなソースコードになっております。
目的は、このパソコンはユニークの個体であるのを判別するためするためです。通信など高度なことに挑戦していませんが、確実にMACアドレスを取得したいです。
お願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) outlook マクロが終了しません。 1 2022/09/02 11:14
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA:小数点以下の数字を取得で...
-
like演算子内に変数って使えな...
-
リストビュー:先頭行のアイテ...
-
エクセルVBAによるIE制御(セレ...
-
VB.NETで DataRow()を利用して...
-
データ数をカウントしたいのですが
-
何が間違ってるのか教えていた...
-
利用者側のMACアドレスを取得し...
-
MACアドレス取得が上手くいかない
-
SJIS日本語ファイル名をEUC-JP...
-
コンボボックスの表示は最大何行?
-
漢字→ふりがなの取得
-
VBAでActiveDirectoryのユーザ...
-
ListView 項目の選択/選択解除...
-
CGIで受信パラメータを解析...
-
Flexgridで選択行の列の値を取...
-
outlookでメールのフォルダパス...
-
URIでのページの移動について
-
ディスプレイの表示可能な解像...
-
GetLongPathName関数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
ListView 項目の選択/選択解除...
-
VBA:小数点以下の数字を取得で...
-
VBAでActiveDirectoryのユーザ...
-
利用者側のMACアドレスを取得し...
-
count(*)で取得した値をJAVAの...
-
Flexgridで選択行の列の値を取...
-
Spreadの選択行の取得について
-
like演算子内に変数って使えな...
-
EXCELのリストボックスを選択し...
-
データ数をカウントしたいのですが
-
VBA Shapesの座標からセル位置...
-
NTPサーバから時刻を取得する
-
VBA リストボックス内の値を複...
-
エクセルVBAで複数選択できるよ...
-
JavaScriptにおいてコンピュー...
-
時間を分に変換するプログラム
-
JavaScriptでWindowsログオンID...
-
「Excel VBA」 Webクエリ マク...
-
javaで週の最初の日(例:月曜日...
おすすめ情報