begin process at 2012 05 28 18:40:08
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

Comparaison de texte (tableau TCHAR)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Comparaison de texte (tableau TCHAR)

samedi 23 décembre 2006 à 14:53:38 | Comparaison de texte (tableau TCHAR)

VTwin

Salut à vous et bonnes fetes !

J'ai recupéré sur msdn le bout de code ci dessous. Il permet de lister les clé de registres à un endroit définit.

Mon probleme est que je souhaite savoir si une clé existe. Je parcours donc le tableau de TCHAR ou sont listée les libellés des clés de registre, et je le compare à la clé recherchée :

if(strcmp(achKey, L"Microsoft .NET Framework 2.0")=0)
                {
               
                    MessageBox(NULL, achKey, TEXT("HelloMsg"), 0) ;
                }

Le probleme c'est que ca marche pas, j'ai essayé de faire de plusieurs maniere mais mon if est toujours faux. Je sais en gros que mon achKey est en unicode, et qu'il faut que je le compare a du texte unicode, mais je ne sais pas comment faire malgré mes recherches

-------------------------------------------------------------------------------------------

Le code complet tel qu'il est en ce moment :

#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <string.h>

#define MAX_KEY_LENGTH 255
#define MAX_VALUE_NAME 16383

void QueryKey(HKEY hKey)
{
    TCHAR    achKey[MAX_KEY_LENGTH];   // buffer for subkey name
    DWORD    cbName;                   // size of name string
    TCHAR    achClass[MAX_PATH] = TEXT("");  // buffer for class name
    DWORD    cchClassName = MAX_PATH;  // size of class string
    DWORD    cSubKeys=0;               // number of subkeys
    DWORD    cbMaxSubKey;              // longest subkey size
    DWORD    cchMaxClass;              // longest class string
    DWORD    cValues;              // number of values for key
    DWORD    cchMaxValue;          // longest value name
    DWORD    cbMaxValueData;       // longest value data
    DWORD    cbSecurityDescriptor; // size of security descriptor
    FILETIME ftLastWriteTime;      // last write time

 
    DWORD i, retCode;
 
    TCHAR  achValue[MAX_VALUE_NAME];
    DWORD cchValue = MAX_VALUE_NAME;
 
    // Get the class name and the value count.
    retCode = RegQueryInfoKey(
        hKey,                    // key handle
        achClass,                // buffer for class name
        &cchClassName,           // size of class string
        NULL,                    // reserved
        &cSubKeys,               // number of subkeys
        &cbMaxSubKey,            // longest subkey size
        &cchMaxClass,            // longest class string
        &cValues,                // number of values for this key
        &cchMaxValue,            // longest value name
        &cbMaxValueData,         // longest value data
        &cbSecurityDescriptor,   // security descriptor
        &ftLastWriteTime);       // last write time
 
    // Enumerate the subkeys, until RegEnumKeyEx fails.
  
    if (cSubKeys)
    {

        for (i=0; i<cSubKeys; i++)
        {
            cbName = MAX_KEY_LENGTH;
            retCode = RegEnumKeyEx(hKey, i,
                     achKey,
                     &cbName,
                     NULL,
                     NULL,
                     NULL,
                     &ftLastWriteTime);
            if (retCode == ERROR_SUCCESS)
            {
               
                if(strcmp(achKey, L"Microsoft .NET Framework 2.0")=0)
                    {
               
                    MessageBox(NULL, achKey, TEXT("HelloMsg"), 0) ;
                }
            }
        }
    }
 
   
}

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
  
   HKEY hTestKey;

   if( RegOpenKeyEx( HKEY_LOCAL_MACHINE,
        TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\uninstall"),
        0,
        KEY_READ,
        &hTestKey) == ERROR_SUCCESS
      )
   {
      QueryKey(hTestKey);
   }

     return 0 ;
}


Merci pour votre aide
PS : je debute completement le cpp, evitez les termes trop techniques mdr
PS2 : mon prog doit rester du cpp natif

 


samedi 23 décembre 2006 à 15:06:40 | Re : Comparaison de texte (tableau TCHAR)

Joky

Membre Club
Un test ça s'effectue avec le double égal == et pas avec = qui est une affectation

ULARGE_INTEGERJokyQi=QI("Joky"

samedi 23 décembre 2006 à 15:13:12 | Re : Comparaison de texte (tableau TCHAR)

VTwin

Ok merci c'est corrigé. Ca donne donc ca :

if(strcmp(achKey, L"Microsoft .NET Framework 2.0")= =0)
                {
               
                    MessageBox(NULL, achKey, TEXT("HelloMsg"), 0) ;
                }


Mais j'ai une erreur sur mon strcomp qui n'a pas l'air d'apprecier ce que je lui demande :

Error    1    error C2664: 'strcmp' : cannot convert parameter 1 from 'TCHAR [255]' to 'const char *'   

Merci

samedi 23 décembre 2006 à 15:15:37 | Re : Comparaison de texte (tableau TCHAR)

SAKingdom

Membre Club
Réponse acceptée !
On ne compare pas un char * avec un wchar_t *. C'est soit un char * char * avec strcmp ou wchar_t * wchar_t * avec wcscmp

C++ (@++)

samedi 23 décembre 2006 à 15:29:16 | Re : Comparaison de texte (tableau TCHAR)

VTwin

Ok ca semble marcher beaucoup mieux avec wscmp!

if(wcscmp(achKey, L"Microsoft .NET Framework 2.0")==0)
                    {
               
                    MessageBox(NULL, achKey, TEXT("HelloMsg"), 0) ;
                }

Merci SAKingdom !

Faut que je bouquine ces histoires de variables maintenant 


samedi 23 décembre 2006 à 15:55:36 | Re : Comparaison de texte (tableau TCHAR)

aardman

Membre Club
Réponse acceptée !
Salut,
Si achKey est un tableau de TCHAR, il faut utiliser _tcscmp() et TEXT("Microsoft .NET Framework 2.0"), sinon tu aura des problemes quand tu compilera en ansi.
samedi 23 décembre 2006 à 16:41:52 | Re : Comparaison de texte (tableau TCHAR)

VTwin

Ok je vais utiliser ta methode, merci aardman !


Cette discussion est classée dans : name, max, value, of, dword


Répondre à ce message

Sujets en rapport avec ce message

[code c++] hediteur hexa [ par devoX ] bonjours a tous,je suis debutant en c++ et je cherche a realiser un editeur hexadecimal sous Vc++J'ai deja commencer a ecririr une petite partie du co Comment lire un fichier qui contient de l'hexadecimal [ par Steph115 ] Bonjour,j'ai un fichier .sol (ce sont des shared objects pour flash) qui est construit comme expliqué sur ce site : http://www.osflash.org/amf/envelop attribuer valeur pour chaine de caractères [ par mejdimm ] salut tout le monde.... j'ai réalisé une fonction en C : 'name_to_value' qui donne la valeur correspondante à chaque nom, les noms et valeurs sont t écriture dans un fichier en C [ par Trinity_vv ] <TD id=HB_Focus_Element vAlign=top width="100%" background="" height=250 UNSELECTAB sensors en C++ wrapper ? [ par panthere007 ] Hello Je voudrai me bricoller un petit sof en console pour y afficher des alertes a ma sauce ,osd ,tty, son etc etc... man libsensors fourni bien de Erreur : illegal call of non-static member function !!! [ par soficher ] Bjr a tous;j'ai 1 ptt probleme dans la declaration d'une classe, il m'affiche l'erreur: 'CTapiLine::DoLineCallState' : illegal call of non-static memb Un problème de registre [ par nightlord666 ] Bonjour ! J'ai fait un code me permettant de lister des préférences de mon application. Elles sont contenues dans la clé HKCU/Software/Test/Preference GL_MAX_LIGHTS [ par manolobis ] Bonjour à tous, toutes,Sous OpenGL et concernant les lumières on retrouve souvent les information suivantes:- Le nombre de lumières maxi dépend de l'i Recherche dans un array (binary search) [ par mast ] Bonjour! J'ai une array qui contient des prénoms, qui s'appelle x et une autre qui contient un nom seulement (name). J'ai écrit une function de "bina Tres bizzard, je ne comprend pas (lecture de data file) [ par IceFinger ] Bonjour a tous, et si quelqu'un peut m'aider, ce serait vraiment bien venuVoila, je dois lire des data file, mon soft marche parfaitement SAUF pour un


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,167 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales