begin process at 2012 05 30 16:21:47
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

REG_DWORD


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

REG_DWORD

samedi 28 juin 2003 à 10:41:42 | REG_DWORD

Xentor609

Lorsque je recupere la valeur d'une clé avec RegEnumValue,
celle-ci doit etre stockée dans un BYTE.

Quand le type de la valeur recupérée est un REG_SZ, y'a pas de probleme,
mais si c'est un REG_DWORD alors je n'arrive a lire la valeur.

En debuggant, et en activant l'affichage en hexadecimal(VC6), je peux lire cette valeur sous forme hexadecimale, mais si je veux copier le contenu du BYTE -disons dans un fichier ou simplement une messagebox- alors j'obtiens des carcteres speciaux comme des petits carres tout noirs.

Bon en fait, ce que je voudrais c'est pouvoir convertir ces caracteres speciaux de BYTE en Hexadecimal (ou decimal),comme affiche VC6 en mode debug.

Je sais c pas tres clair, mais c'est pas evident a explique


DWORD j=0;
char szListe[255];
DWORD j=0;
DWORD dwSize=sizeof(szListe);
DWORD dwType;
BYTE bData[255];
DWORD dwSizeData=sizeof(bData);

if(!RegEnumValue(hKey,j,szListe,&dwSize,0,&dwType,bData,&dwSizeData));
//code
...
samedi 28 juin 2003 à 10:50:35 | Re : REG_DWORD

BruNews

Administrateur CodeS-SourceS
et bien sers toi de ultoa() en base 16.
Pour un REG_DWORD tu recois bien sur un nombre en binaire, faut simplement le transformer en ASCII pour affichage.
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> Lorsque je recupere la valeur d'une clé avec RegEnumValue,
> celle-ci doit etre stockée dans un BYTE.
>
> Quand le type de la valeur recupérée est un REG_SZ, y'a pas de probleme,
> mais si c'est un REG_DWORD alors je n'arrive a lire la valeur.
>
> En debuggant, et en activant l'affichage en hexadecimal(VC6), je peux lire cette valeur sous forme hexadecimale, mais si je veux copier le contenu du BYTE -disons dans un fichier ou simplement une messagebox- alors j'obtiens des carcteres speciaux comme des petits carres tout noirs.
>
> Bon en fait, ce que je voudrais c'est pouvoir convertir ces caracteres speciaux de BYTE en Hexadecimal (ou decimal),comme affiche VC6 en mode debug.
>
> Je sais c pas tres clair, mais c'est pas evident a explique
>
>

> DWORD j=0;
> char szListe[255];
> DWORD j=0;
> DWORD dwSize=sizeof(szListe);
> DWORD dwType;
> BYTE bData[255];
> DWORD dwSizeData=sizeof(bData);
>
> if(!RegEnumValue(hKey,j,szListe,&dwSize,0,&dwType,bData,&dwSizeData));
> //code
> ...
>

samedi 28 juin 2003 à 11:06:09 | Re : REG_DWORD

Xentor609

Ok, ca marche.
Merci pour cette reponse tres rapide!
par contre je viens de me rendre contre qu'il manque toujours le dernier caractere dans szListe(qui contient le nom de la cle).
Pour mon tableau est suffisamment grand, a quoi peut etre du ce probleme?



-------------------------------
Réponse au message :
-------------------------------

> et bien sers toi de ultoa() en base 16.
> Pour un REG_DWORD tu recois bien sur un nombre en binaire, faut simplement le transformer en ASCII pour affichage.
> BruNews, ciao...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Lorsque je recupere la valeur d'une clé avec RegEnumValue,
> > celle-ci doit etre stockée dans un BYTE.
> >
> > Quand le type de la valeur recupérée est un REG_SZ, y'a pas de probleme,
> > mais si c'est un REG_DWORD alors je n'arrive a lire la valeur.
> >
> > En debuggant, et en activant l'affichage en hexadecimal(VC6), je peux lire cette valeur sous forme hexadecimale, mais si je veux copier le contenu du BYTE -disons dans un fichier ou simplement une messagebox- alors j'obtiens des carcteres speciaux comme des petits carres tout noirs.
> >
> > Bon en fait, ce que je voudrais c'est pouvoir convertir ces caracteres speciaux de BYTE en Hexadecimal (ou decimal),comme affiche VC6 en mode debug.
> >
> > Je sais c pas tres clair, mais c'est pas evident a explique
> >
> >

> > DWORD j=0;
> > char szListe[255];
> > DWORD j=0;
> > DWORD dwSize=sizeof(szListe);
> > DWORD dwType;
> > BYTE bData[255];
> > DWORD dwSizeData=sizeof(bData);
> >
> > if(!RegEnumValue(hKey,j,szListe,&dwSize,0,&dwType,bData,&dwSizeData));
> > //code
> > ...
> >

>
samedi 28 juin 2003 à 11:19:47 | Re : REG_DWORD

BruNews

Administrateur CodeS-SourceS
Voila un exemple complet que tu peux recompiler, 1 seul fichier cpp. Lance exe, il te fait un fichier dans lequel il enumer cles et valeurs de HKEY_CURRENT_USER Control Panel\\Desktop.
Tu t'en inspireras, RegQueryInfoKey et RegEnumValue sont employes.

#include <windows.h>

HANDLE m_hFile = INVALID_HANDLE_VALUE;

BOOL FileExists(const char* pFile)
{
WIN32_FIND_DATA fStruct;
HANDLE hFile = FindFirstFile(pFile, &fStruct);
if(hFile == INVALID_HANDLE_VALUE) return 0;
FindClose(hFile); return 1;
}

void AppPathInitialize()
{
char szThis[300];
char* c = szThis + GetModuleFileName(NULL, szThis, 300);
while(*--c != '\\') *c = 0;
SetCurrentDirectory(szThis);
}

void MsgProbemSystem(const char* pszMsg)
{
MessageBox(0, pszMsg, "ERREUR", MB_ICONEXCLAMATION);
}

void QueryKeyValues(HANDLE hFile, HKEY hKey)
{
DWORD dwSubKeysCount = 0;
DWORD dwMaxSubKeyLen;
DWORD dwValuesCount;
DWORD dwMaxValueNameLen;
DWORD dwMaxValueDataLen;
char szValueName[MAX_PATH];
DWORD dwValueLen = MAX_PATH;
char szBuff[MAX_PATH + 25], szCRLF[] = "\r\n";
DWORD dwWrite, dwType, dwDataLen;
DWORD i, j, dwRet;
BYTE *pbData = 0;
if(ERROR_SUCCESS != RegQueryInfoKey(hKey, 0, 0, NULL,
&dwSubKeysCount,
&dwMaxSubKeyLen,
0,
&dwValuesCount,
&dwMaxValueNameLen,
&dwMaxValueDataLen,
0, 0)) return;

dwMaxValueDataLen++;
if((pbData = (BYTE*)malloc(dwMaxValueDataLen)) == NULL) {
MsgProbemSystem("Problème mémoire"); return;
}
if(dwSubKeysCount) {
i = 0; strcpy(szBuff, " ");
ultoa(dwSubKeysCount, szBuff + 5, 10); strcat(szBuff, " SubKeys:");
strcat(szBuff, szCRLF);
WriteFile(hFile, szBuff, strlen(szBuff), &dwWrite, NULL);
while((i < dwSubKeysCount) && (ERROR_SUCCESS == RegEnumKey(hKey, i++, szBuff, MAX_PATH))) {
strcat(szBuff, szCRLF);
WriteFile(hFile, szBuff, strlen(szBuff), &dwWrite, NULL);
}
WriteFile(hFile, szCRLF, 2, &dwWrite, NULL);
}
if(dwValuesCount) {
for(i = 0, dwRet = ERROR_SUCCESS; i < dwValuesCount; i++) {
dwValueLen = MAX_PATH; szValueName[0] = 0;
dwDataLen = dwMaxValueDataLen; szBuff[0] = 0;
dwRet = RegEnumValue(hKey, i, szValueName, &dwValueLen,
NULL, &dwType, pbData, &dwDataLen);

if(!strlen(szValueName)) strcpy(szValueName, "<NO NAME>");
wsprintf(szBuff, "%d) %s ", i, szValueName);

if(dwRet == ERROR_SUCCESS) {
WriteFile(hFile, szBuff, strlen(szBuff), &dwWrite, NULL);
if(dwType == REG_DWORD) {
WriteFile(hFile, "(REG_DWORD) ", 12, &dwWrite, NULL);
dwType = MAKELONG(MAKEWORD(pbData[0], pbData[1]), MAKEWORD(pbData[2], pbData[3]));
ultoa(dwType, szBuff, 10);
WriteFile(hFile, szBuff, strlen(szBuff), &dwWrite, NULL);
}
else if(dwType == REG_BINARY) {
WriteFile(hFile, "(REG_BINARY) ", 13, &dwWrite, NULL);
for(j = 0; j < dwDataLen; j++) {
wsprintf(szBuff, "%.2x ", pbData[j]);
WriteFile(hFile, szBuff, strlen(szBuff), &dwWrite, NULL);
}
}
else WriteFile(hFile, pbData, dwDataLen, &dwWrite, NULL);
WriteFile(hFile, szCRLF, 2, &dwWrite, NULL);
}
else {
strcat(szBuff, " ERREUR\r\n");
WriteFile(hFile, "ERREUR", strlen(szBuff), &dwWrite, NULL);
}
}

}
if(pbData) free(pbData);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR szCmdLine, int iCmdShow)
{
char szFile[] = "AnalyReg.txt";
AppPathInitialize();
if(FileExists(szFile)) {
if(IDOK != MessageBox(0, "Ce fichier existe déjà\nFaut-il le remplacer",
szFile, MB_ICONQUESTION | MB_OKCANCEL)) return 0;
}
HANDLE hFile = CreateFile(szFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if(hFile == INVALID_HANDLE_VALUE) {
MsgProbemSystem("Problème avec le système de fichiers"); return 0;
}
HKEY hKey;
if(RegOpenKeyEx(HKEY_CURRENT_USER, "Control Panel\\Desktop",
0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS) {
QueryKeyValues(hFile, hKey);
}
CloseHandle(hFile);
return 0;
}

BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> Ok, ca marche.
> Merci pour cette reponse tres rapide!
> par contre je viens de me rendre contre qu'il manque toujours le dernier caractere dans szListe(qui contient le nom de la cle).
> Pour mon tableau est suffisamment grand, a quoi peut etre du ce probleme?
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > et bien sers toi de ultoa() en base 16.
> > Pour un REG_DWORD tu recois bien sur un nombre en binaire, faut simplement le transformer en ASCII pour affichage.
> > BruNews, ciao...
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > Lorsque je recupere la valeur d'une clé avec RegEnumValue,
> > > celle-ci doit etre stockée dans un BYTE.
> > >
> > > Quand le type de la valeur recupérée est un REG_SZ, y'a pas de probleme,
> > > mais si c'est un REG_DWORD alors je n'arrive a lire la valeur.
> > >
> > > En debuggant, et en activant l'affichage en hexadecimal(VC6), je peux lire cette valeur sous forme hexadecimale, mais si je veux copier le contenu du BYTE -disons dans un fichier ou simplement une messagebox- alors j'obtiens des carcteres speciaux comme des petits carres tout noirs.
> > >
> > > Bon en fait, ce que je voudrais c'est pouvoir convertir ces caracteres speciaux de BYTE en Hexadecimal (ou decimal),comme affiche VC6 en mode debug.
> > >
> > > Je sais c pas tres clair, mais c'est pas evident a explique
> > >
> > >

> > > DWORD j=0;
> > > char szListe[255];
> > > DWORD j=0;
> > > DWORD dwSize=sizeof(szListe);
> > > DWORD dwType;
> > > BYTE bData[255];
> > > DWORD dwSizeData=sizeof(bData);
> > >
> > > if(!RegEnumValue(hKey,j,szListe,&dwSize,0,&dwType,bData,&dwSizeData));
> > > //code
> > > ...
> > >

> >
>
samedi 28 juin 2003 à 11:53:19 | Re : REG_DWORD

Xentor609

Merci bcp!



-------------------------------
Réponse au message :
-------------------------------

> Voila un exemple complet que tu peux recompiler, 1 seul fichier cpp. Lance exe, il te fait un fichier dans lequel il enumer cles et valeurs de HKEY_CURRENT_USER Control Panel\\Desktop.
> Tu t'en inspireras, RegQueryInfoKey et RegEnumValue sont employes.
>
> #include <windows.h>
>
> HANDLE m_hFile = INVALID_HANDLE_VALUE;
>
> BOOL FileExists(const char* pFile)
> {
> WIN32_FIND_DATA fStruct;
> HANDLE hFile = FindFirstFile(pFile, &fStruct);
> if(hFile == INVALID_HANDLE_VALUE) return 0;
> FindClose(hFile); return 1;
> }
>
> void AppPathInitialize()
> {
> char szThis[300];
> char* c = szThis + GetModuleFileName(NULL, szThis, 300);
> while(*--c != '\\') *c = 0;
> SetCurrentDirectory(szThis);
> }
>
> void MsgProbemSystem(const char* pszMsg)
> {
> MessageBox(0, pszMsg, "ERREUR", MB_ICONEXCLAMATION);
> }
>
> void QueryKeyValues(HANDLE hFile, HKEY hKey)
> {
> DWORD dwSubKeysCount = 0;
> DWORD dwMaxSubKeyLen;
> DWORD dwValuesCount;
> DWORD dwMaxValueNameLen;
> DWORD dwMaxValueDataLen;
> char szValueName[MAX_PATH];
> DWORD dwValueLen = MAX_PATH;
> char szBuff[MAX_PATH + 25], szCRLF[] = "\r\n";
> DWORD dwWrite, dwType, dwDataLen;
> DWORD i, j, dwRet;
> BYTE *pbData = 0;
> if(ERROR_SUCCESS != RegQueryInfoKey(hKey, 0, 0, NULL,
> &dwSubKeysCount,
> &dwMaxSubKeyLen,
> 0,
> &dwValuesCount,
> &dwMaxValueNameLen,
> &dwMaxValueDataLen,
> 0, 0)) return;
>
> dwMaxValueDataLen++;
> if((pbData = (BYTE*)malloc(dwMaxValueDataLen)) == NULL) {
> MsgProbemSystem("Problème mémoire"); return;
> }
> if(dwSubKeysCount) {
> i = 0; strcpy(szBuff, " ");
> ultoa(dwSubKeysCount, szBuff + 5, 10); strcat(szBuff, " SubKeys:");
> strcat(szBuff, szCRLF);
> WriteFile(hFile, szBuff, strlen(szBuff), &dwWrite, NULL);
> while((i < dwSubKeysCount) && (ERROR_SUCCESS == RegEnumKey(hKey, i++, szBuff, MAX_PATH))) {
> strcat(szBuff, szCRLF);
> WriteFile(hFile, szBuff, strlen(szBuff), &dwWrite, NULL);
> }
> WriteFile(hFile, szCRLF, 2, &dwWrite, NULL);
> }
> if(dwValuesCount) {
> for(i = 0, dwRet = ERROR_SUCCESS; i < dwValuesCount; i++) {
> dwValueLen = MAX_PATH; szValueName[0] = 0;
> dwDataLen = dwMaxValueDataLen; szBuff[0] = 0;
> dwRet = RegEnumValue(hKey, i, szValueName, &dwValueLen,
> NULL, &dwType, pbData, &dwDataLen);
>
> if(!strlen(szValueName)) strcpy(szValueName, "<NO NAME>");
> wsprintf(szBuff, "%d) %s ", i, szValueName);
>
> if(dwRet == ERROR_SUCCESS) {
> WriteFile(hFile, szBuff, strlen(szBuff), &dwWrite, NULL);
> if(dwType == REG_DWORD) {
> WriteFile(hFile, "(REG_DWORD) ", 12, &dwWrite, NULL);
> dwType = MAKELONG(MAKEWORD(pbData[0], pbData[1]), MAKEWORD(pbData[2], pbData[3]));
> ultoa(dwType, szBuff, 10);
> WriteFile(hFile, szBuff, strlen(szBuff), &dwWrite, NULL);
> }
> else if(dwType == REG_BINARY) {
> WriteFile(hFile, "(REG_BINARY) ", 13, &dwWrite, NULL);
> for(j = 0; j < dwDataLen; j++) {
> wsprintf(szBuff, "%.2x ", pbData[j]);
> WriteFile(hFile, szBuff, strlen(szBuff), &dwWrite, NULL);
> }
> }
> else WriteFile(hFile, pbData, dwDataLen, &dwWrite, NULL);
> WriteFile(hFile, szCRLF, 2, &dwWrite, NULL);
> }
> else {
> strcat(szBuff, " ERREUR\r\n");
> WriteFile(hFile, "ERREUR", strlen(szBuff), &dwWrite, NULL);
> }
> }
>
> }
> if(pbData) free(pbData);
> }
>
> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR szCmdLine, int iCmdShow)
> {
> char szFile[] = "AnalyReg.txt";
> AppPathInitialize();
> if(FileExists(szFile)) {
> if(IDOK != MessageBox(0, "Ce fichier existe déjà\nFaut-il le remplacer",
> szFile, MB_ICONQUESTION | MB_OKCANCEL)) return 0;
> }
> HANDLE hFile = CreateFile(szFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
> FILE_FLAG_SEQUENTIAL_SCAN, NULL);
> if(hFile == INVALID_HANDLE_VALUE) {
> MsgProbemSystem("Problème avec le système de fichiers"); return 0;
> }
> HKEY hKey;
> if(RegOpenKeyEx(HKEY_CURRENT_USER, "Control Panel\\Desktop",
> 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS) {
> QueryKeyValues(hFile, hKey);
> }
> CloseHandle(hFile);
> return 0;
> }
>
> BruNews, ciao...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > Ok, ca marche.
> > Merci pour cette reponse tres rapide!
> > par contre je viens de me rendre contre qu'il manque toujours le dernier caractere dans szListe(qui contient le nom de la cle).
> > Pour mon tableau est suffisamment grand, a quoi peut etre du ce probleme?
> >
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > et bien sers toi de ultoa() en base 16.
> > > Pour un REG_DWORD tu recois bien sur un nombre en binaire, faut simplement le transformer en ASCII pour affichage.
> > > BruNews, ciao...
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > Lorsque je recupere la valeur d'une clé avec RegEnumValue,
> > > > celle-ci doit etre stockée dans un BYTE.
> > > >
> > > > Quand le type de la valeur recupérée est un REG_SZ, y'a pas de probleme,
> > > > mais si c'est un REG_DWORD alors je n'arrive a lire la valeur.
> > > >
> > > > En debuggant, et en activant l'affichage en hexadecimal(VC6), je peux lire cette valeur sous forme hexadecimale, mais si je veux copier le contenu du BYTE -disons dans un fichier ou simplement une messagebox- alors j'obtiens des carcteres speciaux comme des petits carres tout noirs.
> > > >
> > > > Bon en fait, ce que je voudrais c'est pouvoir convertir ces caracteres speciaux de BYTE en Hexadecimal (ou decimal),comme affiche VC6 en mode debug.
> > > >
> > > > Je sais c pas tres clair, mais c'est pas evident a explique
> > > >
> > > >

> > > > DWORD j=0;
> > > > char szListe[255];
> > > > DWORD j=0;
> > > > DWORD dwSize=sizeof(szListe);
> > > > DWORD dwType;
> > > > BYTE bData[255];
> > > > DWORD dwSizeData=sizeof(bData);
> > > >
> > > > if(!RegEnumValue(hKey,j,szListe,&dwSize,0,&dwType,bData,&dwSizeData));
> > > > //code
> > > > ...
> > > >

> > >
> >
>
lundi 27 octobre 2003 à 21:52:08 | Re : REG_DWORD

FlyingPolak

est ce qq'un peut me dire pourquoi lorsque je lui demande d'énumerer les cles de HKEY_CLASSES_ROOT, il me balance le code 259 : no_more_entries des le premier passage?
mon code fonctione pourtant bien avec une sous cle


Cette discussion est classée dans : code, valeur, byte, reg, dword


Répondre à ce message

Sujets en rapport avec ce message

Conversion d'un char en LPCSTR ? [ par Xilofeon ] Bonjour d'un débutant en C++Voila j'arrive pas à convertire un char en LPCSTRVoici la parti du code ki me pose pb :...void LitTexte(HKEY HK, Prob de thread [ par sebastienbro ] Bonjour, j'ai un problème avec des thread, je n'arrive pas a en créer un :(Voici mon code : HANDLE hThread1;DWORD dwThreadId1;DWORD WINAPI T Probleme c++ lire une byte Binaire =26 ou =13 [ par WINACreve ] Situation: Je fait un programme qui ouvre n'importe quel fichier et lit chacune de ces bytes 1 par 1 et garde en mémoire leurs valeur.Problème #1: lor WORD, DWORD et BYTE en langage C ? [ par Cako19 ] Bonjour,Les types de données WORD, DWORD et BYTE sont-ils utilisables en langage C ?Ca refuse de compiler chez moi. Ils ne sont pas reconnus.Faut-il i RegSetValueEX > REG_DWORD [ par Roudy ] salut j'aimerais ecrire le chiffre 10 dans mon REG_DWORD mais il me le converti toujours en A et je ne my connait pas vraiement dans les types variabl Changer la valeur d'une variable dans un exe [ par scolinks ] Salut,Je me demandait si c'est possible de changer la valeur d'une variable qui se trouve dans un exe...Par example dans mon exe j'ai:int s;s = 5;</ écrire une clef en binaire [ par alphaone ] Ma fonction ne marche pas.Voici comment je la lance:EcrireTexteBinary(HKEY_CURRENT_USER,REG_BINARY,".DEFAULT\\Software\\Microsoft\\Windows\\CurrentVer [registre] lancez un programme au demarrage [ par lombredudragon ] bonjour je debute en c++ , j'ai fait une recherche sur le site et j'ai trouver ce bout de code pour ecrire dans le registre:#include <br valeur d'un code barre sur une image [ par oguyonvarch ] Bonjour tout le monde !j'espère quie vous pourrez m'aider  :je dois réaliser une appli qui permet de récuperer la valeur d'un code barre sur une image probleme d'incrementation de pointeur [ par lamoueste ] bonjour a tous alors j'ai un petit souci avec un pointeur, voila mon code : BYTE TmpInBuffer[MAX_RATBUFFER_RATTEST+1]; *TmpInBuffer++ = (BYTE)LOBYTE


Nos sponsors


Sondage...

Comparez les prix

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 : 5,351 sec (3)

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