Autor Beitrag
Aggrasso
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16
Erhaltene Danke: 1



BeitragVerfasst: Do 03.01.13 21:05 
Hi, Ich bin neu hir und hab mal ein kleine Frage zum "Win32_CDROMDrive".

Es gibt gewisse sachen die ich nicht auslesen kann jetzt würde ich gerne wissen ob es an der Hardware (und / oder) Software liegt?

Hardware: HL-DT-ST DVDRAM GH40N
Software: Windows 7 Home Premium 64Bit

Es geht mir darum, wenn es an eine von den beiden liegt bau ich es mit in meine "Class" mit ein, wenn nicht dann lass ich es!
Und zZ ist mein Laptop nicht betriebsbereit.

Das geht nicht:

/*
* --> Convert.ToInt32(MO_CDROMDrive.Properties["SCSITargetId"]);
* --> MO_CDROMDrive.Properties["RevisionLevel"].Value.ToString();
* --> MO_CDROMDrive.Properties["NumberOfMediaSupported"].Value.ToString();
* --> MO_CDROMDrive.Properties["NeedsCleaning"].Value.ToString();
* --> MO_CDROMDrive.Properties["PowerManagementSupported"].Value.ToString();
* --> MO_CDROMDrive.Properties["InstallDate"].Value.ToString();
* --> MO_CDROMDrive.Properties["MaximumComponentLength"].Value.ToString();
* --> MO_CDROMDrive.Properties["LastErrorCode"].Value.ToString();
* --> MO_CDROMDrive.Properties["DefaultBlockSize"].Value.ToString();
* --> MO_CDROMDrive.Properties["MinBlockSize"].Value.ToString();
* --> MO_CDROMDrive.Properties["MaxBlockSize"].Value.ToString();
* --> MO_CDROMDrive.Properties["MaxMediaSize"].Value.ToString();
* --> MO_CDROMDrive.Properties["PowerManagementCapabilities[]"].Value.ToString()
* --> MO_CDROMDrive.Properties["ErrorCleared"].Value.ToString();
* --> MO_CDROMDrive.Properties["ErrorDescription"].Value.ToString();
* --> MO_CDROMDrive.Properties["ErrorMethodology"].Value.ToString();
* --> MO_CDROMDrive.Properties["FileSystemFlags"].Value.ToString();
* --> MO_CDROMDrive.Properties["StatusInfo"].Value.ToString();
* --> MO_CDROMDrive.Properties["SCSILogicalUnit"].Value.ToString();
* --> MO_CDROMDrive.Properties["CapabilityDescriptions[]"].Value.ToString();
* --> MO_CDROMDrive.Properties["Capabilities[]"].Value.ToString();
*/

Und so lese ich es aus:

ausblenden volle Höhe C#-Quelltext
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:
private static void M_BackgroundWorker_CDROMDrive_DoWork(object sender, DoWorkEventArgs e)
        {
            ManagementClass MC_CDROMDrive = new ManagementClass("Win32_CDROMDrive");
            ManagementObjectCollection MOC_CDROMDrive = MC_CDROMDrive.GetInstances();
            foreach (ManagementObject MO_CDROMDrive in MOC_CDROMDrive)
            {
                // [CDROMDrive "CreationClassName" ]
                try { M_str_CreationClassName = MO_CDROMDrive.Properties["CreationClassName"].Value.ToString(); }
                catch (Exception Ex) { M_str_CreationClassName = string.Empty; Error(); }
                // [ CDROMDrive "MediaLoaded" ]
                try { M_bool_MediaLoaded = Convert.ToBoolean(MO_CDROMDrive.Properties["MediaLoaded"].Value); }
                catch (Exception Ex) { Error(); }
                if (M_bool_MediaLoaded == true)
                {
                    // [ CDROMDrive "Disc Size" ]
                    try { M_long_DISC_Size = Convert.ToInt64(MO_CDROMDrive.Properties["Size"].Value); }
                    catch (Exception Ex) { M_long_DISC_Size = 0; Error(); }
                    // [CDROMDrive "VolumeName" ]
                    try { M_Str_VolumeName = MO_CDROMDrive.Properties["VolumeName"].Value.ToString(); }
                    catch (Exception Ex) { M_Str_VolumeName = "???"; Error(); }

                    // mehr Code...
                }
                // [CDROMDrive "SCSIBus" ]
                try { M_int_SCSIBus = Convert.ToInt32(MO_CDROMDrive.Properties["SCSIBus"].Value); }
                catch (Exception Ex) { M_int_SCSIBus = 0; Error(); }
                // [CDROMDrive "SCSIPort" ]
                try { M_int_SCSIPort = Convert.ToInt32(MO_CDROMDrive.Properties["SCSIPort"].Value); }
                catch (Exception Ex) { M_int_SCSIPort = 0; Error(); }

                // mehr Code...
            }
        }


Ich hoff ihr könnt mir eine erleuchtung geben !

MFG Aggrasso
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Do 03.01.13 22:05 
Grundsätzlich sind sämtliche Properties eine Frage des Gerätetreibers. Einige der Properties sind zwingend vorgeschrieben, der Rest ist optional und somit obliegt es dem Gerätetreiberprogrammierer, (bzw. dem Programmierer der Gerätefirmware), entsprechende Daten zu liefern.

Ich würds komplett einbauen.

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 03.01.13 22:24 
Du bekommst nur das was das Device bzw dessen Treiber liefern möchte. Es gibt da keinen zwingenden Grund das da was kommen muss oder das was da kommt sinnvoll ist.

Das bei Capabilities nix kommt glaube ich nicht so einfach. Zumindest nicht bei deinem Code. Die Property ist ein Array bei einem Aufruf von Array.ToString() kommt da der Typ (und nicht der Inhalt) oder wenn das Array null ist knallt dein Code. Einfach immer Value.ToString() aufzurufen ist zu einfach gedacht.
Aggrasso Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16
Erhaltene Danke: 1



BeitragVerfasst: Do 03.01.13 22:52 
@Ralf Jansen

Ich bekomme bei "Capabilities" das:

Zitat:

System.Management.ManagementException: Nicht gefunden
bei System.Management.ManagementException.ThrowWithExtendedInfo(ManagementStatus errorCode)
bei System.Management.PropertyDataCollection.get_Item(String propertyName)
bei CDROMDrive.Class_CDROMDrive.M_BackgroundWorker_CDROMDrive_DoWork(Object sender, DoWorkEventArgs e) in C:\Users\+++++\Pictures\Documents\Visual Studio 2008\Projects\Temp\Temp\Class_CDROMDrive.cs:Zeile 310.


Zitat:

Einfach immer Value.ToString() aufzurufen ist zu einfach gedacht.


Das mach ich nicht, ich schau schon was es ist. Auf -> msdn.microsoft.com/e...81%28v=vs.85%29.aspx
Ich hab es nur zum testen gemacht aber da sowieso ein Exception kommt geh ich davon aus das es da nichts gibt!

Z.b. bei "PhysicalMemory" so hol ich die "SerialNumber" von (BANK0 - BANK5)

ausblenden C#-Quelltext
1:
2:
3:
 int_Count++;
  // [ PhysicalMemory "SerialNumber" Info ]
  Str_Arry_PhysicalMemoryInfo[6, int_Count] = MO_PhysicalMemory.Properties["SerialNumber"].Value.ToString();
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 03.01.13 23:18 
Zitat:
Das mach ich nicht, ich schau schon was es ist


Zitat:
MO_CDROMDrive.Properties["Capabilities[]"].Value.ToString();


Das sieht aber eindeutig so aus als ob du es tust. Die Klammern gehören auch sicher nicht zum Namen sondern sind Teil des Typs. Bedenke die von dir verlinkte Hilfe bezieht sich auf C++. Und in C++ packt man die Array Klammern bei einer Deklaration an den Bezeichner und nicht an den Typ.
Aggrasso Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16
Erhaltene Danke: 1



BeitragVerfasst: Do 03.01.13 23:56 
@Ralf Jansen

OK ich muss es zugeben das ich da einen Fehler gemacht hab. :oops:

Jetzt hab ich das Arry ausgelutscht. :lol:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
                int T = 0;
                foreach (object Value in ((Array)MO_CDROMDrive.Properties["Capabilities"].Value))
                {
                    //Value.ToString(); // Test 
                    T++;
                    M_Str_Test = T.ToString(); 
                }



Danke für den hinweiss :)