0

管理オブジェクトにアクセスする方法を知っています。これを言いましょう:

var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter");            
foreach (var nic in searcher.Get())
{                
    Console.WriteLine(nic["caption"]);
}

現在、このnic[]-synthaxは使用するのが非常に悪いです。Visual Studioサーバーエクスプローラーを見ると、選択した各オブジェクトのプロパティグリッドがいっぱいになっていることがわかります。そこにバインド可能なクラスを作成しているようなにおいがします。同じことをするためのライブラリやアプローチはありますか?次のような構文を取得したい

var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter");            
foreach (var nic in searcher.Get())
{                
    Console.WriteLine((nic as Win32NetworkAdapter).Caption);
}

すでに発明された新しいものを実装するのに時間を無駄にしたくありません!

4

3 に答える 3

2

Visual Studioの一部であるMgmtclassgen.exe(Management Strongly Typed Class Generator)を使用してみませんか?

于 2012-02-03T18:55:07.023 に答える
1

WMIはクエリを受け取り、不確定な結果のセットを返します。クエリはSQLに似ているため、特定の列のみを返す場合があります。プロパティグリッドは、各戻り値を個別の名前と値に列挙するだけです。クエリ結果に設定された固定列はありません。このため、返されたリストからそれぞれを明示的にフェッチする必要があります。

于 2011-11-21T16:35:28.400 に答える
0

私のように他の人を幸せにするために、私は自分の問題を解決するためのT4を作成しました。これはhttp://www.codingfreaks.de/2011/11/22/t4-fur-wmi-zugriff/(ドイツ語!!!)で文書化されており、 http://www.codingfreaks.de/filesで入手できます。 /wmi01/WmiHelper.tt。それを機能させるには、

  1. VSのプロジェクトに追加します。
  2. 「Classes.txt」という名前のテキストファイルを追加します。
  3. 「Classes.txt」で使用するWMIクラスごとに1行追加します(例:「Win32_NetworkAdapter」)
  4. プロジェクト内のttファイルを右クリックし、「ユーザー定義ツール」を使用します。
  5. コードに移動して、WmiHelperと入力します。*

楽しみ!

于 2011-11-22T17:22:12.097 に答える