SMBIOSから情報を取得する - ページ 4

 
Vitaly Muzichenko:

誰かがvinを確認してくれればよかったのに。

アップロードしたのは私です。

 
JRandomTrader:

ワインパッドからアップロードしていたところです。

まあ、uuidが正しいかどうかhwinfoで確認するのは嫌だったんでしょうね。

 

以下はその修正内容です。

実際の使用において、余分な情報が必要ない場合は、コメントアウトする/定義しない #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:

ライブラリのコードをきれいにしたり、私的なニーズに合わせて手を加えたりすることに何の意味があるのでしょうか?これらのコード片は、必要ないときはコンパイルされません。インラインのライブラリだけで、1行のコードで呼び出せる?

コードの意味を理解するため?私の基準では、機能は小さいです。説明したように、#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にあります

もしかして、私は繊細さを知らない?

ありがとうございました!うまくいきました。