2011-05-13 3 views
4

私のC#アプリケーションは、Intelのマザーボードとグラフィックスチップセットを持つ組み込みボックスにあります。 ATIグラフィックカードはPCI Expressに搭載されています。一般的にグラフィックスカードはビデオをドライブしますが、ATIカードに障害が発生するとビデオはグラフィックスチップセットから出力されます。C#でどのビデオカードがビデオを駆動するかを検出します。

診断目的でATIグラフィックスカードの障害を検出する必要があります。

これを行う方法に関するアイデアやサンプルコード。 follwingアイデアが助けたりしません場合 ラジュ

+12

何を試しましたか?ここでは、努力や少なくともいくつかの研究を見て、あなたがすでに試した答えをあなたに知らせるのではなく、あなた自身を助けてくれることへの献身を示したいと思っています。 –

答えて

16

これはうまくいけばあなたを始められます。

System.Managementへの参照を追加し、その後、あなたがこれを行うことができます: - WDDM v1.1の

ManagementObjectSearcher searcher 
    = new ManagementObjectSearcher("SELECT * FROM Win32_DisplayConfiguration"); 

    string graphicsCard = string.Empty; 
    foreach (ManagementObject mo in searcher.Get()) 
    { 
     foreach (PropertyData property in mo.Properties) 
     { 
      if (property.Name == "Description") 
      { 
       graphicsCard = property.Value.ToString(); 
      } 
     } 
    } 

を私の場合は、graphicsCard

NVIDIAのGeForce 8400 GS(マイクロソフト 社に等しく、 )

+0

同じことを試みましたが、私はWDDMバージョンを取得していません –

+0

これは私のWindows * 10(RS2)+インテル(R)HDグラフィックス4600+ NVIDIA GeForce GTX 1080 *システムに間違ったデバイスを与え、私のモニターはGTX1080に接続されていますこれはHD4600を与える。しかし、私は 'Win32_DisplayControllerConfiguration'クラスが正解を返すことが分かりました。 – hillin

1

あなたの質問は完全には明らかではないが、事前に

おかげで、私はよく分かりません。

おそらく、非常にシンプルなもので十分でしょう:

を2枚のグラフィックスカードは、異なる解像度を実行する場合は、使用してモニタの解像度を確認してください。

System.Windows.Forms.SystemInformation.PrimaryMonitorSize 

同様に、一枚のカードが複数のモニタをサポートしている場合、番号を確認しますSystemInformation.MonitorCountを使用してモニタを監視します。

2

プロモーションアンサーは、単一ビデオカードシステムでのみ動作します。 ATIとNvidiaのカードを持っているとき - WMIクエリがATIを返します。そのモニタがNvidiaカードに接続されていても、dxdiagはNvidiaを表示し、ゲームはそのカード上で実行されます。

私が正しいビデオカードを決定する唯一の方法は、SlimDXを使ってDXデバイスを作成し、使用したカードを調べることでした。しかし、.dllは3Mb以上の重さです。

var graphicsCardName = new Direct3D().Adapters[0].Details.Description; 
+3

代わりに 'SELECT * FROM Win32_VideoController'クエリを試してください。現在有効なカードは、** CurrentBitsPerPixel **または** CurrentHorizo​​ntalResolution **の値がnullと等しくないことで判別できます。 Intel HD 3000 + Ati Radeon HD 6470Mを搭載したノートパソコンで私の仕事をしました。私が見つけたWMIキーの完全なリスト[**このCodeProjectの記事**](http://www.codeproject.com/Articles/17973/How-To-Get-Hardware-Information-CPU-ID-MainBoard- I) – bairog

+0

@bairog ^^これが答えになるはずです。 – NielW

+1

私のWindows * 10(RS2)+インテル(R)HDグラフィックス4600 + NVIDIA GeForce GTX 1080 *システムで@bairogは真ではなく、両方のデバイスにnull以外の** CurrentBitsPerPixel **と** CurrentHorizo​​ntalResolution **値があります。 – hillin

6

私は、選択した回答が最初のビデオコントローラのみを返す方法のファンではありません。また、すべてのプロパティをループする必要はありません。必要なものを手に入れてください。 CurrentBitsPerPixelがnullでない場合、アクティブなコントローラーの1つが表示されます。私は、推奨されていないWin32_DisplayConfigurationの代わりに@bairogによって提案されたWin32_VideoControllerを使用しています。

ManagementObjectSearcher searcher = 
    new ManagementObjectSearcher("SELECT * FROM Win32_VideoController"); 
foreach (ManagementObject mo in searcher.Get()) 
{ 
    PropertyData currentBitsPerPixel = mo.Properties["CurrentBitsPerPixel"]; 
    PropertyData description = mo.Properties["Description"]; 
    if (currentBitsPerPixel != null && description != null) 
    { 
     if (currentBitsPerPixel.Value != null) 
      System.Console.WriteLine(description.Value); 
    } 
} 

私のマシンには3つのビデオコントローラがあります。最初のものはアクティブではありません(ShoreTel)。もう1つはアクティブですが、ビデオカードではありません(デスクトップオーソリティ)。 3番目は私のNVidiaです。このコードは、DAコントローラとNVidiaコントローラの両方を表示します。

0

私はこの質問ですべてのアプローチを試しましたが、私は正しい答えを与えませんでした。しかし、Win32_DisplayControllerConfigurationクラスを使ってを現在のにすることが可能でした。MSDNによると、このクラスは時代遅れですが、それは正しい答えを返すだけです:

using System; 
using System.Management; 
using System.Windows.Forms; 

namespace WMISample 
{ 
    public class MyWMIQuery 
    { 
     public static void Main() 
     { 
      try 
      { 
       ManagementObjectSearcher searcher = 
        new ManagementObjectSearcher("root\\CIMV2", 
        "SELECT * FROM Win32_DisplayControllerConfiguration"); 

       foreach (ManagementObject queryObj in searcher.Get()) 
       { 
        Console.WriteLine("----------------------------------- "); 
        Console.WriteLine("Win32_DisplayControllerConfiguration instance"); 
        Console.WriteLine("-----------------------------------"); 
        Console.WriteLine("Name: {0}", queryObj["Name"]); 
      } 
      } 
      catch (ManagementException e) 
      { 
       MessageBox.Show("An error occurred while querying for WMI data: " + e.Message); 
      } 
     } 
    } 
} 

(あなたはWMIをいじりされている場合、コードはWMI Code Creator、素晴らしいツールによって生成された。)

これができますGeForce GTX 1080私のWindows 10(RS2)+インテル(R)HDグラフィック4600 + NVIDIA GeForce GTX 1080システム。

関連する問題