从SMBIOS中检索信息 - 页 4

 
Vitaly Muzichenko:

我希望有人能检查一下乙烯基。

我就是那个上传的人。

 
JRandomTrader:

我只是从Win上传。

好吧,你不想用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中的部分

根本看不懂代码,它是如此的混乱。当删除一些东西时,我打破了一切。

我想留下一些行,并将其转移到脚本本身

下面是获取C分区号码的代码,它很短,也很有意义。

#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:

我根本看不懂代码,它太复杂了。如果我删除一些东西,就会破坏一切。

我想在脚本本身中留下几句话

下面是获取C分区号码的代码,它很短,也很有意义。

---

你能像这样做吗?

清理库中的代码,调整以适应私人需要,有什么意义?这些代码片断在不需要时不会被编译。只是为了嵌入库,而且是通过单行调用。

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中有一个

也许我不知道任何微妙之处?

非常感谢你,它成功了!