Получение информации из SMBIOS - страница 4

 
Vitaly Muzichenko:

Ещё бы вайн кто проверил

Так я же с вайна и закидывал.

 
JRandomTrader:

Так я же с вайна и закидывал.

Ну так Вы же не захотели проверить с помощью hwinfo, правильно ли выдаётся uuid.

 

Вот исправления.

Для реального использования, когда не нужна лишняя инфа, закомментировать/не определять #define SMBIOS_DEBUG

Файлы:
SMBIOS.mqh  6 kb
 
Edgar Akhmadeev:

Вот исправления.

Для реального использования, когда не нужна лишняя инфа, закомментировать/не определять #define SMBIOS_DEBUG

А как можно вычистить mqh от лишнего кода, чтобы только осталось Print("UUID: ", uuid);

 
Vitaly Muzichenko:

А как можно вычистить mqh от лишнего кода, чтобы только осталось Print("UUID: ", uuid);

Удалить всё обёрнутое  #ifdef SMBIOS_DEBUG / #endif

Не сотрите части в #else

 
Edgar Akhmadeev:

Удалить всё обёрнутое  #ifdef SMBIOS_DEBUG / #endif

Не сотрите части в #else

Вообще не могу прочесть код, уж сильно наворочено всё. Удаляя что-то - ломаю всё.

Хочется оставить несколько строк с переносом в сам скрипт 

Вот код получения номера раздела С, всё кратко и понятно

#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);
}

---

Можете сделать в таком виде, пожалуйста?

 
Vitaly Muzichenko:

Вообще не могу прочесть код, уж сильно наворочено всё. Удаляя что-то - ломаю всё.

Хочется оставить несколько строк с переносом в сам скрипт 

Вот код получения номера раздела С, всё кратко и понятно

---

Можете сделать в таком виде, пожалуйста?

Какой смысл чистить код в библиотеке, подстраивая под частные потребности? Эти части кода не компилируются, когда не нужны. Просто инклудить библиотеку, а вызывается она одной строкой

string uuid = SMBIOS::Read();

С целью разобраться в коде? Функция-то небольшая по моим меркам. Если аккуратно удалите, как я объяснил - всё в обёртке #ifdef/#endif, но оставляя между #else/#endif - ничего не сломается. Половина кода всё равно останется. Там же не просто запрос и выдача, а перебор последовательности блоков данных, обработка и перекодирование.

 
Edgar Akhmadeev:

Какой смысл чистить код в библиотеке, подстраивая под частные потребности? Эти части кода не компилируются, когда не нужны. Просто инклудить библиотеку, а вызывается она одной строкой

С целью разобраться в коде? Функция-то небольшая по моим меркам. Если аккуратно удалите, как я объяснил - всё в обёртке #ifdef/#endif, но оставляя между #else/#endif - ничего не сломается. Половина кода всё равно останется. Там же не просто запрос и выдача, а перебор последовательности блоков данных, обработка и перекодирование.

Попробую ещё зайти с другой стороны, может что и получится.

Последняя попытка привела к этому, но и данных конечно не увидел. 


 

Внёс косметическое исправление, перекачивать не обязательно

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

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

Хотелось бы, как в c++

const uint SMBIOS_signature = 'RSMB';

Есть же в MQL

datetime d = D'2020.07.06';

Может, я каких тонкостей не знаю?

Файлы:
SMBIOS.mqh  6 kb
 
Edgar Akhmadeev:

Внёс косметическое исправление, перекачивать не обязательно

Хотелось бы, как в c++

Есть же в MQL

Может, я каких тонкостей не знаю?

Спасибо огромное, всё получилось!

Причина обращения: