Bibliothèque de classes génériques - bogues, description, questions, caractéristiques d'utilisation et suggestions - page 34

 
Edgar Akhmadeev:
Comme l'a dit notre camarade Mao : "Que cent couleurs fleurissent".
Je me demande si l'uuid correspond ?

L'uuid n'est pas communiqué. Seulement le numéro de série de la carte. L'expérience a montré que SMBIOS ne donne pas les numéros de série pour toutes les cartes, alors que l'uuid est toujours présent et correspond à ce que les logiciels d'analyse du matériel (par exemple HWiNFO) donnent. Le fonctionnement de la variante du numéro de série du sorcier est une question de vérification.

 

J'ai trouvé comment obtenir l'UUID.

#define _WIN64  // Only for a 64-bit terminal!

#include <WbemCli.mqh>
//+-----------------------------------------------------------------------------------------------+
//| Script program start function                                                                 |
//+-----------------------------------------------------------------------------------------------+
void OnStart()
{
   HRESULT result = CoInitialize( 0 );
   if( result == S_OK ){
      lpWbemLocator pLoc;
      result = CoCreateInstance( CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, pLoc.mInterface );
      if( result == S_OK ){
         lpWbemServices pSvc;
         result = pLoc.ConnectServer( "root\\CimV2", "", "", "", pSvc );
         if( result == S_OK ){
            result = CoSetProxyBlanket( pSvc.mInterface, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, 0, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, 0, EOAC_NONE );
            if( result == S_OK ){
               lpEnumWbemClassObject pEnumerator;
               // Получаем UUID.
               result = pSvc.ExecQuery( "SELECT * FROM Win32_ComputerSystemProduct", pEnumerator );
               if( result == S_OK ){
                  uint uReturn = 0;
                  while( result == S_OK ){
                     lpWbemClassObject pclsObj;
                     result = pEnumerator.Next( pclsObj, uReturn );
                     if( uReturn == 0 ){
                        result = S_OK;
                        break;
                     }
                     Variant vtProp;
                     result = pclsObj.Get( "UUID", vtProp );
                     if( result == S_OK ){
                        Print( "UUID", ": ", vtProp.toString() );
                     }
                     pclsObj.Release();
                  }
               }
               
            }
            pSvc.Release();
         }
         pLoc.Release();
      }
      CoUninitialize();
   }
   if( result != S_OK ){
      ushort shortArray[256];
      uint len = FormatMessageW( FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, 0, result, Lcid, shortArray, 256, 0 );
      string strError = ShortArrayToString( shortArray );
      Print( strError );
   }
}
//+-----------------------------------------------------------------------------------------------+
 
Koldun Zloy:

Hors sujet, mais puisque vous êtes ici. Avez-vous fermé la fenêtre Market Watch et la fenêtre avec les positions/ordres ouverts actuels ?

 
fxsaber:

Hors sujet, mais puisque vous êtes ici. Avez-vous fermé la fenêtre de Market Watch et la fenêtre avec les positions/ordres ouverts actuels ?

Non, je ne l'ai pas fait.

Je pense que vous savez comment obtenir les poignées de ces fenêtres.

Avez-vous essayé de leur envoyer un message WM_CLOSE ?

 
Koldun Zloy:

Non, je ne l'ai pas fait.

Je pense que vous savez comment obtenir les poignées de ces fenêtres.

Avez-vous essayé de leur envoyer le message WM_CLOSE ?

J'ai essayé différentes variantes, mais malheureusement ça n'a pas marché pour une raison quelconque.

 
Veuillez ajouter un modificateur const à la méthode.
   bool              TryGetValue(TKey key,TValue &value) const;
 

Question sur les collisions. Est-il possible d'entrer en collision dans un tel cas ?

#include <Generic\HashMap.mqh>

CHashMap<ulong, int> Index;

Si 27 000 entrées ont été faites.

 
fxsaber:

Question sur les collisions. Est-il possible d'entrer en collision dans un tel cas ?

Si ulong est un ticket, oui, mais avec une très faible probabilité.

 
Andrei Trukhanovich:

si ulong est un ticket, oui, mais avec une très faible probabilité

C'est un ticket. Merci pour ces informations.

 
fxsaber:

Question sur les collisions. Est-il possible d'entrer en collision dans un tel cas ?

Si 27 000 entrées ont été faites.

Presque impossible et si vous le faites, l'accès reste super efficace.

C'est pratiquement la méthode d'adressage la plus efficace. Au risque de faire croître la table d'accès à des valeurs monstrueuses.