Cómo obtener los datos básicos de todas las tarjetas gráficas instaladas en el equipo (nombre, procesador de vídeo, RAM, versión del driver, id de dispositivo, etc.). Usaremos WMI (Windows Management Instrumentation) y Visual Studio .Net con C# (C Sharp). Incluimos descarga del código fuente completo y gratuito de la aplicación de ejemplo. Para el desarrollo de esta aplicación se usa .NET 6 y Visual Studio .Net Community 2022.
- Crear clase InvTarjetaGrafica.cs en Visual Studio .Net CSharp.
- Crear clase Inventario.cs en Visual Studio .Net CSharp.
- Formulario para probar las clases anteriores y obtener los adaptadores gráficos y sus datos con WMI y C#.
- Aplicación ProyectoA – Obtener Tarjetas Gráficas WMI en funcionamiento.
- Descarga del código fuente en C# de Visual Studio .Net Community 2022 de la aplicación completa.
Crear clase InvTarjetaGrafica.cs en Visual Studio .Net CSharp
En primer lugar, para almacenar la información de cada tarjeta gráfica del equipo, crearemos una clase llamada InvTarjetaGrafica.cs. Para ello, pulsaremos con el botón derecho del ratón sobre la solución y elegiremos «Agregar» – «Clase…»:
Introduciremos el nombre de la clase (en nuestro caso InvTarjetaGrafica.cs) y pulsaremos «Aceptar»:
Añadiremos el siguiente código fuente C# a la clase creada:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
namespace ProyectoA_Obtener_Tarjetas_Graficas { public class InvTarjetaGrafica { public string Name { get; set; } public string VideoProcessor { get; set; } public long AdapterRAM { get; set; } public string DriverVersion { get; set; } public string DeviceID { get; set; } public InvTarjetaGrafica() { Name = ""; VideoProcessor = ""; AdapterRAM = 0; DriverVersion = ""; DeviceID = ""; } } } |
Crear clase Inventario.cs en Visual Studio .Net CSharp
De la misma forma, crearemos la clase en la que añadiremos todos los métodos de nuestra aplicación C#. Entre ellos, el método para obtener los datos de los adaptadores gráficos del equipo, usando la clase InvTarjetaGrafica.cs anterior para almacenar una lista de clases (lista de adaptadores gráficos). De esta forma obtendremos todos los datos de todos los adaptadores gráficos del equipo (en una lista de miembros de la clase InvTarjetaGrafica.cs).
El código fuente de la clase Inventario.cs será:
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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
using System.Management; namespace ProyectoA_Obtener_Tarjetas_Graficas { class Inventario { //Obtener lista de tarjetas gráficas instaladas en el equipo mediante WMI //Guardará la lista obtenida en LTarjetasGraficas (lista de miembros de la clase InvTarjetaGrafica) public static List<InvTarjetaGrafica>? ObtenerTarjetasGraficas() { List<InvTarjetaGrafica> elementos = new(); try { ManagementObjectSearcher objBusquedaWMI = new ManagementObjectSearcher("SELECT Name, VideoProcessor, DriverVersion, AdapterRAM, DeviceID FROM Win32_VideoController"); foreach (ManagementObject propiedad in objBusquedaWMI.Get().Cast<ManagementObject>()) { InvTarjetaGrafica elemActual = new InvTarjetaGrafica(); try { elemActual.Name = Convert.ToString(propiedad["Name"]); } catch { elemActual.Name = ""; } try { elemActual.VideoProcessor = Convert.ToString(propiedad["VideoProcessor"]); } catch { elemActual.VideoProcessor = ""; } try { elemActual.DriverVersion = Convert.ToString(propiedad["DriverVersion"]); } catch { elemActual.DriverVersion = ""; } try { if (!long.TryParse(Convert.ToString(propiedad["AdapterRAM"]), out long ram)) ram = 0; elemActual.AdapterRAM = ram; } catch { elemActual.AdapterRAM = 0; } try { elemActual.DeviceID = Convert.ToString(propiedad["DeviceID"]); } catch { elemActual.DeviceID = ""; } elementos.Add(elemActual); } return elementos; } catch (Exception error) { string texto = $"Error al obtener tarjetas gráficas del equipo con WMI. Error: {error.Message}"; MessageBox.Show(texto,"Error al obtener tarjetas gráficas...", MessageBoxButtons.OK, MessageBoxIcon.Error); return null; } } } } |
Si algún método da error, como ManagementObjectSearcher, podremos instalarlo directamente desde el código, pasando el ratón por encima del error y pulsando en la bombilla. Mostrará un menú emergente donde indicará «Instalar paquete «System.Management» – «Buscar e instalar la última versión»:
Lo que hará Visual Studio .Net será instalar el paquete necesario por nosotros, agregará el using:
1 |
using System.Management; |
Y agregará la referencia a este paquete (System.Management) para nuestro proyecto:
Todo esto, evidentemente, podemos hacerlo nosotros mismos de forma manual, pero ya hemos comprobado que de forma automática se instala correctamente y es más rápido.
Formulario para probar las clases anteriores y obtener los adaptadores gráficos y sus datos con WMI y C#
Crearemos un formulario con un Button y un TextBox (con propiedad Multiline = True):
En el evento Click del Button añadiremos el siguiente código para obtener las tarjetas gráficas del equipo y sus datos:
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 35 36 |
namespace ProyectoA_Obtener_Tarjetas_Graficas { public partial class formObtenerGraficas : Form { public formObtenerGraficas() { InitializeComponent(); } private void btObtenerGraficas_Click(object sender, EventArgs e) { string texto = ""; //Obtenemos la lista de tarjetas gráficas del equipo var lsTarjetasGraficas = Inventario.ObtenerTarjetasGraficas(); if (lsTarjetasGraficas != null) { //Recorremos todos los elementos de la lista de tipo InvTarjetaGrafica foreach (InvTarjetaGrafica grafica in lsTarjetasGraficas) { //Guardamos los datos del adaptador gráfico actual en texActual //Separamos cada propiedad con un salto de línea string texActual = $"DeviceID: [{grafica.DeviceID}]" + $"\r\n Name: [{grafica.Name}]" + $"\r\n VideoProcessor: [{grafica.VideoProcessor}]" + $"\r\n DriverVersion: [{grafica.DriverVersion}]" + $"\r\n RAM (Bytes): [{grafica.AdapterRAM}]"; //Si es el primer adaptador gráfico añadimos el textActual, si es el //segundo o sucesivos, añadimos un salto de línea antes para separarlos texto += texto == "" ? texActual : $"\r\n{texActual}"; } } txtTarjetasGraficas.Text = texto; } } } |
Aplicación ProyectoA – Obtener Tarjetas Gráficas WMI en funcionamiento
Probaremos la aplicación que obtiene las tarjetas gráficas del equipo y sus datos. Para ello compilaremos el código fuente anterior pulsando F5. Una vez ejecutada la aplicación, pulsaremos en el botón «Obtener Tarjetas Gráficas». Si el equipo sólo tiene una tarjeta gráfica, devolverá:
Por ejemplo:
1 2 3 4 5 |
DeviceID: [VideoController1] Name: [Radeon RX Vega] VideoProcessor: [AMD Radeon Graphics Processor (0x687F)] DriverVersion: [31.0.12027.9001] RAM (Bytes): [4293918720] |
Y si tiene varias, devolverá:
Descarga del código fuente en C# de Visual Studio .Net Community 2022 de la aplicación completa
Para descargar el código fuente completo de este ejemplo WMI con C#, en Visual Studio .Net Community 2022, con .NET 6.0, accede al siguiente enlace (es completamente gratuito):