Abrufen von Informationen aus dem SMBIOS - Seite 4

 
Vitaly Muzichenko:

Ich wünschte, jemand hätte die Fahrgestellnummer überprüft.

Ich bin derjenige, der es hochgeladen hat.

 
JRandomTrader:

Ich habe gerade von einem Winepad hochgeladen.

Nun, Sie wollten nicht mit hwinfo überprüfen, ob die uuid korrekt ist.

 

Hier sind die Korrekturen.

Für den realen Gebrauch, wenn Sie die zusätzlichen Informationen nicht benötigen, kommentieren Sie #define SMBIOS_DEBUG aus bzw. definieren Sie es nicht

Dateien:
SMBIOS.mqh  6 kb
 
Edgar Akhmadeev:

Hier sind die Korrekturen.

Für den tatsächlichen Gebrauch, wenn Sie keine zusätzlichen Informationen benötigen, kommentieren Sie #define SMBIOS_DEBUG aus bzw. definieren Sie es nicht.

Und wie kann mqh von unnötigem Code befreit werden, so dass nurPrint("UUID: ", uuid) übrig bleibt;

 
Vitaly Muzichenko:

Und wie kann mqh von überflüssigem Code befreit werden, so dass nurPrint("UUID: ", uuid) übrig bleibt;

Alle Wrapper entfernen #ifdef SMBIOS_DEBUG / #endif

Teile in #else dürfen nicht gelöscht werden

 
Edgar Akhmadeev:

Alle verpackten Daten löschen #ifdef SMBIOS_DEBUG / #endif

Löschen Sie nicht die Teile in #else

Man kann den Code überhaupt nicht lesen, er ist so verkorkst. Wenn ich etwas lösche, mache ich alles kaputt.

Ich möchte einige Zeilen mit Übertragung auf das Skript selbst hinterlassen

Hier ist der Code zum Abrufen der C-Partitionsnummer, er ist kurz und bündig.

#import "kernel32.dll"
   bool GetVolumeInformationW(const string root_path_name,
                              string volume_name_buffer,
                              uint volume_name_size,
                              uint &volume_serial_number[],
                              uint maximum_component_length,
                              uint file_system_flags,
                              string file_system_name_buffer,
                              uint file_system_name_size
);
#import

string SystemDriveSerialNumber() {
   int iVolumeSerialNumber[1]= {0};
   string sVolumeSerialNumber="";
   if(GetVolumeInformationW("C:\\",NULL,15,iVolumeSerialNumber,0,0,NULL,15)) {
      sVolumeSerialNumber=IntegerToHexString(iVolumeSerialNumber[0]);
      sVolumeSerialNumber=StringSubstr(sVolumeSerialNumber,0,4)+"-"+StringSubstr(sVolumeSerialNumber,4);
   }
  return(sVolumeSerialNumber);
}

---

Können Sie das bitte so machen?

 
Vitaly Muzichenko:

Ich kann den Code überhaupt nicht lesen, er ist zu kompliziert. Wenn ich etwas lösche, mache ich alles kaputt.

Ich würde gerne ein paar Zeilen im Skript selbst lassen

Hier ist der Code zum Abrufen der C-Partitionsnummer, er ist kurz und bündig.

---

Können Sie das bitte so machen?

Was bringt es, den Code in der Bibliothek zu bereinigen und an die eigenen Bedürfnisse anzupassen? Diese Teile des Codes werden nicht kompiliert, wenn sie nicht benötigt werden. Nur um die Bibliothek einzubinden, und sie wird in einer einzigen Zeile aufgerufen.

string uuid = SMBIOS::Read();

Um den Sinn des Codes zu verstehen? Die Funktion ist für meine Verhältnisse klein. Wenn Sie es vorsichtig entfernen, wie ich es erklärt habe - alles im #ifdef/#endif Wrapper, aber zwischen #else/#endif lassen - wird nichts kaputt gehen. Die Hälfte des Codes wird noch vorhanden sein. Es handelt sich nicht nur um eine Abfrage und Ausgabe, sondern um eine Abfolge von Datenblöcken, Verarbeitung und Umkodierung.

 
Edgar Akhmadeev:

Welchen Sinn hat es, den Code in der Bibliothek zu säubern und ihn an die eigenen Bedürfnisse anzupassen? Diese Teile des Codes werden nicht kompiliert, wenn sie nicht benötigt werden. Nur eine Inline-Bibliothek, die mit einer einzigen Zeile aufgerufen wird

Um den Sinn des Codes zu verstehen? Die Funktion ist für meine Verhältnisse klein. Wenn Sie es vorsichtig entfernen, wie ich es erklärt habe - alles im #ifdef/#endif Wrapper, aber zwischen #else/#endif lassen - wird nichts kaputt gehen. Die Hälfte des Codes wird noch vorhanden sein. Es handelt sich nicht nur um eine Abfrage und Ausgabe, sondern um eine Abfolge von Datenblöcken, Verarbeitung und Umkodierung.

Ich werde versuchen, die Sache von der anderen Seite zu betrachten, vielleicht klappt ja etwas.

Der letzte Versuch führte zu diesem Ergebnis, aber natürlich habe ich auch hier keine Daten gesehen.


 

Kosmetische Korrektur, kein erneuter Download nötig

#define  SIG(a, b, c, d) ((a << 24) + (b << 16) + (c << 8) + d)

const uint SMBIOS_signature = SIG('R','S','M','B');

Ich wünschte, es wäre wie in C++

const uint SMBIOS_signature = 'RSMB';

Es gibt eine in MQL

datetime d = D'2020.07.06';

Vielleicht kenne ich einige Feinheiten nicht?

Dateien:
SMBIOS.mqh  6 kb
 
Edgar Akhmadeev:

Kosmetische Korrektur, kein erneuter Download nötig

Ich wünschte, es wäre wie in C++

Es gibt eine in MQL

Vielleicht kenne ich gar keine Feinheiten?

Vielen Dank, es hat funktioniert!