Bonjour, j'ai un petit problème.

J'ai besoin de chercher le nom d'un ManagementObject dans deux classes : Win32_PnPEntity et Win32_USBHub. Il peut potentiellement être dans l'une ou dans l'autre.

Pour le moment je procède de la manière qui suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
 
    string name = "";
 
            ManagementObjectSearcher searcher2 = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity");
            foreach (ManagementObject mo2 in searcher2.Get())
            {
                try
                {
                    name = mo2["Name"].ToString();
                    if (name.Contains("USB Serial Port"))
                    {
                        //strReaderType = "Bixi";
                        return "Bixi";
                    }
                    else if (name.Contains("Kaba B-Net 91 07"))
                    {
                        //strReaderType = "Kaba";
                        return "Kaba";
                    }
 
                }
                catch(Exception ex)
                {
                    LogWriter.WriteLog(ListMessages[5].Msg_Text1 + " " + System.Reflection.MethodBase.GetCurrentMethod().Name + " " + ex.Message);
                }
            }
 
            ManagementObjectSearcher searcher3 = new ManagementObjectSearcher("SELECT * FROM Win32_USBHub");
            foreach (ManagementObject mo2 in searcher3.Get())
            {
                try
                {
                    name = mo2["Name"].ToString();
                    if (name.Contains("USB Serial Port"))
                    {
                        //strReaderType = "Bixi";
                        return "Bixi";
                    }
                    else if (name.Contains("Kaba B-Net 91 07"))
                    {
                        //strReaderType = "Kaba";
                        return "Kaba";
                    }
 
                }
                catch (Exception ex)
                {
                    LogWriter.WriteLog(ListMessages[5].Msg_Text1 + " " + System.Reflection.MethodBase.GetCurrentMethod().Name + " " + ex.Message);
                }
            }
 
            return "Erreur";
Seulement c'est pas très propre, je répète pas mal de code bêtement, 2 fois.

J'ai donc pensé à deux solutions :

1 : Modifier la requête SELCT * FROM Win32_PnPEntity en la faisant aller chercher dans les deux classes directement (malheureusement impossible je crois)
2 : Créer un tableau ou une liste de ManagementObject, unifier les deux en une seule et aller la parcourir.

Je peux coder comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
     ManagementObjectSearcher mos1 = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity");
            ManagementObjectSearcher mos2 = new ManagementObjectSearcher("SELECT * FROM Win32_USBHub");
            ManagementObjectCollection moc = mos1.Get();
            moc = mos2.Get();
Cependant les objets de la mos1.Get() ne seront pas sauvegardés, ils seront écrasés par la mos2.Get()

avez-vous une solution à me proposer ?

Thx.