Recuperando informações do SMBIOS - página 4

 
Vitaly Muzichenko:

Eu gostaria que alguém tivesse verificado o vin.

Fui eu quem fez o upload.

 
JRandomTrader:

Eu estava apenas fazendo o upload do Win.

Bem, você não quis verificar com hwinfo para ver se o uuid estava correto.

 

Aqui estão as correções.

Para uso no mundo real, quando você não precisa de informações extras, comente/não defina #define SMBIOS_DEBUG

Arquivos anexados:
SMBIOS.mqh  6 kb
 
Edgar Akhmadeev:

Aqui estão as correções.

Para uso real, quando você não precisa de informações extras, comente/não defina #define SMBIOS_DEBUG

E como se pode limpar o mqh de códigos desnecessários, de modo que somente aimpressão("UUID: ", uuid) permaneça;

 
Vitaly Muzichenko:

E como se pode limpar o mqh do excesso de código para que somente aimpressão("UUID: ", uuid) permaneça;

Remover todas as embalagens #ifdef SMBIOS_DEBUG / #endif

Não apagar peças em #else

 
Edgar Akhmadeev:

Apagar todas as embalagens #ifdef SMBIOS_DEBUG / #endif

Não apague as peças em #else

Não consigo ler o código de forma alguma, ele está tão estragado. Ao apagar algo, eu quebro tudo.

Quero deixar algumas linhas com transferência para o próprio roteiro

Aqui está o código para obter o número da partição C, ele é curto e direto ao ponto.

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

---

Você pode fazer isso assim, por favor?

 
Vitaly Muzichenko:

Não consigo ler o código de forma alguma, é muito complicado. Se eu apagar alguma coisa, eu quebro tudo.

Eu gostaria de deixar algumas linhas no próprio roteiro

Aqui está o código para obter o número da partição C, ele é curto e direto ao ponto.

---

Você pode fazer isso assim, por favor?

Qual é o objetivo de limpar o código na biblioteca, ajustando-o para atender às necessidades particulares? Essas peças de código não são compiladas quando não são necessárias. Apenas para iludir a biblioteca, e ela é chamada por uma única linha.

string uuid = SMBIOS::Read();

Com o propósito de dar sentido ao código? A função é pequena, segundo meus padrões. Se você o remover cuidadosamente, como expliquei - tudo no invólucro #ifdef/#endif, mas deixando entre #else/#endif - nada se quebrará. A metade do código ainda estará lá. Não é apenas uma consulta e uma saída, mas uma seqüência de blocos de dados, processamento e recodificação.

 
Edgar Akhmadeev:

Qual é o objetivo de limpar o código na biblioteca, ajustando-o para atender às necessidades particulares? Estes pedaços de código não são compilados quando não são necessários. Apenas uma biblioteca em linha, e é chamada por uma única linha

Com o propósito de dar sentido ao código? A função é pequena, segundo meus padrões. Se você o remover cuidadosamente, como expliquei - tudo no invólucro #ifdef/#endif, mas deixando entre #else/#endif - nada se quebrará. A metade do código ainda estará lá. Não é apenas uma consulta e uma saída, mas uma seqüência de blocos de dados, processamento e recodificação.

Vou tentar de outra forma, talvez algo funcione.

A última tentativa levou a isso, mas é claro que eu também não vi nenhum dado.


 

Fez uma correção cosmética, não há necessidade de recarregar

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

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

Eu gostaria que fosse como em c++

const uint SMBIOS_signature = 'RSMB';

Há um na MQL

datetime d = D'2020.07.06';

Talvez eu não conheça algumas sutilezas?

Arquivos anexados:
SMBIOS.mqh  6 kb
 
Edgar Akhmadeev:

Fez uma correção cosmética, não há necessidade de recarregar

Eu gostaria que fosse como em c++

Há um na MQL

Talvez eu não conheça nenhuma sutileza?

Muito obrigado, funcionou!