2011-07-26 11 views
2

Network Interface Cardが無効で、C#を使用している場合、Windows 7のマシンのアドレスMACを取得する方法が必要です。私はウェブ上で検索し、また次のリンクを参照しました。 2番目のリンクの答えを使用して、Windows XPで必要な詳細を得ることができましたが、NICが無効になっている場合はWindows 7には入りません。C#でNICが無効になっているときにWindows 7でMACアドレスを取得する

Getting MAC address C#

Get MAC Address when network adapter is disabled?

誰もがこのタスクを成し遂げる方法を知っています?

おかげで...

答えて

0

ここで私は(Win7の64ビット)思い付いたものです:

var query = new SelectQuery("Win32_NetworkAdapter"); 
var scope = new ManagementScope("\\root\\cimv2"); 
scope.Connect(); 
var searcher = new ManagementObjectSearcher(scope, query); 
var managementObjects = searcher.Get(); 
foreach (var mo in managementObjects) 
{ 
    Debug.WriteLine("{0} : {1}", mo["Description"], mo["MACAddress"]); 
} 

マイBluetoothアダプタは次のようになります。

Bluetoothデバイス(パーソナルエリアネットワーク):70:F3:95:88:F7:7E

ただし、無効にすると、MACアドレスは空白として表示されます。

アダプターがクラスのメソッドを介してMACを照会できるようにする必要がありますが、手動でWin32_NetworkAdapterクラスをラップする必要があります。

あなたは

はこのようにそれを起動します.NET FrameworkのSDKツール 'mgmtclassgen.exe' を使用してWMIオブジェクトのクラスラッパーを生成する必要があります(生成されたファイルは80Kです):

mgmtclassgen Win32_NetworkAdapter -p NetworkAdapter.cs 

そして、そのようなコードを増補:

var query = new SelectQuery("Win32_NetworkAdapter"); 
var scope = new ManagementScope("\\root\\cimv2"); 
scope.Connect(); 
var searcher = new ManagementObjectSearcher(scope, query); 
var managementObjects = searcher.Get(); 
var adapters = managementObjects.Cast<ManagementBaseObject>().Select(s => new NetworkAdapter(s)); 
foreach (var adapter in adapters) 
{ 
    adapter.Enable(); 
    Console.WriteLine("{0} : {1}", adapter.Name, adapter.MACAddress); 
} 

しかし、私は(有効呼び出されたときに何も起こらなかったように私はそれが仕事を得ることができなかった)とリターンコードが0であった。私は、あなたや、いくつかの希望でそれを掲載それが機能することを可能にする欠落した詳細を推測するかもしれない。

+0

お返事ありがとうございます、私はそれをチェックアウトします... –

1

私はMACアドレスをキャッシュする必要があると思います。たとえば、ネットワークカードが有効になっている場合、そのカードのキャッシュ内のMACアドレスを更新できます。後で無効になったときにWindowsからMACを取得できない場合は、キャッシュから取得できます。

ロードされていないドライバからMACアドレスを取得することはできません。また、ドライバは、ネットワークカードのROMチップからMACアドレスをロードする必要があります。したがって、MACには、無効なネットワークカードからMACアドレスを取得する方法がある場合、Windowsが使用するのと同じ手法を使用する必要があります。