elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  recorrido de variable management object
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: recorrido de variable management object  (Leído 4,181 veces)
d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
recorrido de variable management object
« en: 14 Mayo 2015, 14:08 pm »

hola a todos, estoy tratando de obtener el puerto donde se conecta el arduino por medio de  c# pero no se como obtener los datos que se obtienen en la variable el pedazo de codigo es:
Código
  1. ManagementObjectSearcher vloPrueba = new ManagementObjectSearcher("select * from Win32_SerialPort where name like '%aArduino%'");
  2.  
  3.            // List<ListaDispositivos> vloLista = new List<ListaDispositivos>();
  4.  
  5.            foreach (ManagementObject service in vloPrueba.Get())
  6.            {
  7.  
  8.                //vloLista.Add(new {nombre service["DeviceID"].ToString(),puerto = service["Name"].ToString()});
  9.                nombre = service["DeviceID"].ToString();
  10.                puerto = service["Name"].ToString();
  11.                }
  12.  
al principio trate de agregarlo a un combobox pero al agregar los valores me daba error entre los corchetes porque escribo entre comillas DeviceID y Name por lo que ahora trato de agregarlo a un arreglo de variables


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: recorrido de variable management object
« Respuesta #1 en: 14 Mayo 2015, 15:46 pm »

No se entiende que error tenias, ni que error tienes ahora.

Especifica el tipo de excepción, y el mensaje exacto del error, da detalles, no somos adivinos.

De todas formas, prueba así:
Código
  1. string spName = "..rellenar..";
  2. string name = string.Empty;
  3. string port = string.Empty;
  4.  
  5. ManagementObjectSearcher moQuery = new ManagementObjectSearcher(string.Format("select DeviceID,Name from Win32_SerialPort where name like '{0}'", spName));
  6.  
  7. foreach (ManagementObject mo in moQuery.Get()) {
  8. name = mo.Properties("DeviceID").Value.ToString;
  9. port = mo.Properties("Name").Value.ToString;
  10. }

Saludos!


« Última modificación: 14 Mayo 2015, 15:50 pm por Eleкtro » En línea



d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
Re: recorrido de variable management object
« Respuesta #2 en: 15 Mayo 2015, 05:22 am »

si, creo que me hizo falta un poco mas de aclaración del error, pero aquí esta todo el código que al principio intente implementar....
Código
  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. using System.Management;
  12.  
  13.  
  14. namespace Listar_Puertos
  15. {
  16.    public partial class Form1 : Form
  17.    {
  18.        public Form1()
  19.        {
  20.            InitializeComponent();
  21.        }
  22.  
  23.  
  24.        public List<ListaDispositivos> ListarPuertosArduino()
  25.        {
  26.  
  27.  
  28.          ManagementObjectSearcher vloPrueba = new ManagementObjectSearcher("select * from Win32_SerialPort where name like '%Arduino%'");
  29.  
  30.           List<ListaDispositivos> vloLista = new List<ListaDispositivos>();
  31.  
  32.  
  33.           foreach (ManagementObject service in vloPrueba.Get())
  34.            {
  35.  
  36.  
  37.  
  38.                 vloLista.Add(new ListaDispositivos { Puerto = service["DeviceID"].ToString(), Dispositivo =service["Name"].ToString });
  39.  
  40.           }
  41.  
  42.           return vloLista;
  43.      }
  44.  
  45.  
  46.        private void Form1_Load(object sender, EventArgs e)
  47.        {
  48.            List<ListaDispositivos> vloLista = ListarPuertosArduino();
  49.            //cboArduino es el nombre del combobox
  50.            cboArduino.DataSource = vloLista;
  51.            cboArduino.ValueMember = "Puerto";
  52.            cboArduino.DisplayMember = "Dispositivo";
  53.  
  54.        }
  55.    }
  56.  
  57.    public class ListaDispositivos
  58.    {
  59.        public string Puerto { set; get; }
  60.        public string Dispositivo { set; get; }
  61.    }
  62. }
  63.  
  64.  
da error en la parte del service si dentro los corchetes le escribo "DeviceID" y "Name", el error dice: No se puede aplicar la indizacion [ ] a una expresion del tipo 'ListarPuertos.Management Object'. ahorita intentare implementar la observación, porque en verdad lo único que necesito es saber el puerto de conexión del arduino y no necesariamente mostrar la lista
« Última modificación: 15 Mayo 2015, 05:23 am por d91 » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: recorrido de variable management object
« Respuesta #3 en: 15 Mayo 2015, 06:15 am »

Para acceder a una propiedad de una query de WMI debes usar la colección ManagementBaseObject.Properties, arriba te mostré un ejemplo. ¿Lo has probado?.

Documentación:
https://msdn.microsoft.com/en-us/library/system.management.managementbaseobject.properties%28v=vs.110%29.aspx

Saludos!
En línea



d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
Re: recorrido de variable management object
« Respuesta #4 en: 16 Mayo 2015, 13:43 pm »

ya intente con el fragmento pero me da error al compilar, por la parte de properties (el value me da error al escribirlo, yo uso VS2012 para desktop)
Código
  1. foreach (ManagementObject mo in moQuery.Get()) {
  2. name = mo.Properties("DeviceID").ToString();
  3. port = mo.Properties("Name").ToString();
  4. }
  5.  
  6.  
como el managementObject crea un codigo automatico
y cuando escribo properties tambien se le agrega otro fragmento de codigo el cual queda así
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace Listar_Puertos
  7. {
  8.    class ManagementObject
  9.    {
  10.        internal object Properties(string p)
  11.        {
  12.            throw new NotImplementedException();
  13.        }
  14.    }
  15. }
  16.  
por lo que el error al compilar dice "El tipo Listar_puertos.ManagementObject ya contiene una definicion properties" o sea es como si al codigo de la clase  management object le deberia mandar un string y no colocarlo directamente en el codigo principal
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: recorrido de variable management object
« Respuesta #5 en: 16 Mayo 2015, 16:01 pm »

me da error al compilar, por la parte de properties (el value me da error al escribirlo, yo uso VS2012 para desktop)

Respondo lo mismo que antes:
Especifica el tipo de excepción, y el mensaje exacto del error, da detalles, no somos adivinos.

Es dificil intentar averiguar que significa para ti "me da error al escribirlo", por favor, intenta describir el problema que tengas de forma clara.



como el managementObject crea un codigo automatico
y cuando escribo properties tambien se le agrega otro fragmento de codigo el cual queda así
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace Listar_Puertos
  7. {
  8.    class ManagementObject
  9.    {
  10.        internal object Properties(string p)
  11.        {
  12.            throw new NotImplementedException();
  13.        }
  14.    }
  15. }
  16.  

No, vamos a ver, ManagementObject es una Class que ya está definida en la librería de classes de .Net Framework, tú no tienes que definir esa Class y el único motivo por el que se pueda generar dicho código de forma automatica pienso que debe ser porque en el proyecto no has referenciado el ensamblado que contiene la Class ManagementObject y en las opciones por defecto de resolución de errores has elegido generar el código (vacío, por supuesto) de dicha Class y del miembro ManagementObject.Properties, pero hacer eso no sirve para solucionar el problema.

1. Elimina todo ese "código automático" que se haya generado.

2. Añade una referencia del ensamblado "System.Management.dll" en tu proyecto:
How to: Add and Remove References in Visual Studio (C#)



3. Importa el namespace System.Management utilizando la directiva Using:
using Directive (C# Reference)

4. Por último, vuelve a probar el código que te mostré al principio, ahora debería funcionarte correctamente.

Saludos!
« Última modificación: 16 Mayo 2015, 16:24 pm por Eleкtro » En línea



d91

Desconectado Desconectado

Mensajes: 165


Ver Perfil
Re: recorrido de variable management object
« Respuesta #6 en: 17 Mayo 2015, 04:31 am »

ya agregue la referencia y lo probe pero desaparecio properties de los metodos de mo, solo me aparecen otros, probe con este pero no obtengo nada

Código
  1. foreach (ManagementObject mo in moQuery.Get())
  2.            {
  3.                name = mo.GetPropertyValue("DeviceID").ToString();
  4.                port = mo.GetPropertyValue("Name").ToString();
  5.  
  6.            }
  7.  
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines