patdan
Messages postés37Date d'inscriptionlundi 20 septembre 2004StatutMembreDernière intervention 3 avril 2009
-
21 mars 2005 à 11:13
patdan
Messages postés37Date d'inscriptionlundi 20 septembre 2004StatutMembreDernière intervention 3 avril 2009
-
4 avril 2005 à 18:27
Bonjour à tous,
Je reviens à la charge car j'ai tout essayé, sauf la bonne méthode. Ca fait un sacré bout de temps que je me prends la tête pour récupérer dans mon message la valeur que j' attends cad : VBCE.ProjectRun.
Je sais qu'elle y est sur mon pocket, c' est pour ça que je teste pour voir si ça marche
avt de me lancer sur un pocket inconnu !! Mon but est de contrôler si tout est OK pour lancer un prog EVB. Si les valeurs nécessaires n'existent pas, je veux les créer. Je n'ai fait que le début du code et c'est déjà la galère!!
Alors, bonjour la suite!! Je sais, il y a # exemples sur les sites, mais pas 1 ne m'a tirée d'affaire. Je rappelle que je ne connais pas du tout EVC++.
Voici mon petit bout de code qui ne me ramène rien :
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)
{
HKEY hkey;
LPCWSTR param=NULL;
LPCSTR ch1;
long retval;
DWORD lType;
DWORD cch;
retval = RegOpenKeyEx(HKEY_CLASSES_ROOT,TEXT(".vb"),0,KEY_ALL_ACCESS,&hkey);
retval = RegQueryValueEx(hkey,TEXT("Default"),NULL,&lType,NULL,&cch);
ch1 = LPCSTR(malloc((cch+1)*sizeof(char)));
retval = RegQueryValueEx(hkey,TEXT("Default"),NULL,NULL,LPBYTEch1),NULL);
const unsigned short ch2 = (const unsigned short) *ch1;
if (retval!=0)
MessageBox (NULL,&ch2,TEXT("Info"),MB_OK);
else
MessageBox (NULL,TEXT("Problème"),TEXT("Info"),MB_OK);
RegCloseKey(hkey);
return 0;
}
****************
Je dois dire que ce qui est chaîne et conversion de chaînes etc...Je suis noyée ds ce langage
Je vous en supplie, si qq'un peut m'aider, ce serait super!!
MERCI D'AVANCE POUR VOTRE AIDE !! Je craque!
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 27 mars 2005 à 09:59
As tu regardé sur msdn.microsoft.com ?
RegOpenKeyEx = ton 3eme et 4 eme parametres doivent etre a 0. Tu peux tester la valeur de retour (si != ERROR_SUCCESS alors probleme.).
Dans malloc, n'oublie pas que CE travaille QU'AVEC de l'unicode, donc c'est sizeof(TCHAR) (ou 2...)
"const unsigned short ch2 = (const unsigned short) *ch1; " < Ca je vois pas a quoi ca sert.
Dans ta MessageBox, tu n'as qu'a mettre MessageBox(0, ch1, ....); ca marchera, c'est sur.
patdan
Messages postés37Date d'inscriptionlundi 20 septembre 2004StatutMembreDernière intervention 3 avril 2009 3 avril 2005 à 10:03
Bonjour,
Super sympa d'essayer de m'aider. Mais depuis le début, je me heurte au problème suivant : lorsque j'écris :
retval = RegQueryValueEx(hkey,TEXT("Default"),NULL,NULL,LPBYTE(ch1),NULL);
if (retval!=0)
MessageBox (NULL,ch1,TEXT("Info"),MB_OK);
else
MessageBox (NULL,TEXT("Problème"),TEXT("Info"),MB_OK);
RegCloseKey(hkey);
J'ai le message suivant :
error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char *' to 'const unsigned short *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Error executing clarm.exe.
Merci de ton aide AlexMAN, si tu peux continuer à m'aider, je te remercie... (ou qqun d'autre) Merci d'avance à tous
Bonne prog
patdan
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 3 avril 2005 à 10:35
Alors je t'explique un truc qui m'a "choqué" (pour la fonction RegSetValueEx, donc je pense que c'est pareil) :
Alors, comme tu as pu le voir, le param a passer, c'est un char* (caracteres codés sur un octet), mais comme tu dois le savoir, WinCE ne prend que des caracteres Unicode (enfin les API, si je me trompe pas), donc en fait, il faut que tu passes une chaine unicode (TCHAR*) et que tu castes en (unsigned const char *) pour que ca passe a la compilation :
Je presume que tu veux recuperer une clé de type 'string', sinon regarde au lien que je te donne plus bas. Count doit contenir la taille en octet de ch1.
patdan
Messages postés37Date d'inscriptionlundi 20 septembre 2004StatutMembreDernière intervention 3 avril 2009 3 avril 2005 à 17:41
C'est encore moi!! MSDN OK j'y vais souvent ms ne connaissant pas le C++, il n'y a pas d'exemple et je plane.
Mon code avec REG_SZ comme tu m'as conseillé :
HKEY hkey;
LPCWSTR param=NULL;TCHAR ch1[64];
long retval;
DWORD lType;
DWORD cch;
DWORD Count;
retval = RegOpenKeyEx(HKEY_CLASSES_ROOT,TEXT(".vb"),0,0,&hkey);
retval = RegQueryValueEx(hkey,TEXT("Default"),NULL,&lType,NULL,&cch);
retval = RegQueryValueEx(hkey,TEXT("Default"),NULL,REG_SZ,(unsigned char*)ch1,&Count);
if (retval!=0)
MessageBox (NULL,ch1,TEXT("Info"),MB_OK);
else
MessageBox (NULL,TEXT("Problème"),TEXT("Info"),MB_OK);
RegCloseKey(hkey);
return 0;
error C2664: 'RegQueryValueExW' : cannot convert parameter 4 from 'const int' to 'unsigned long *'
Si je mets NULL à la place de REG_SZ, pas d'erreur compil, mais le msg donne "Problème" à l'exec
D'autre part, je suis assez nulle pour ne pas savoir exploiter la taille Count. J'avais il y a qque tps essayé des ".left"...mais j'avais tjrs un pb du style left de .Left doit être de type Struct/union/ etc...
J' ai honte de le dire , mais je cherche partout depuis plus d'1 mois Eh oui!! C'est pour ça que je deviens casse-pompe. Je désespère.C'est triste à dire mais il faut quasiment me mâcher le boulot, vu que j'ai tout essayé sans résultat
Merci de ta patience AlexMAN. J'espère que tu en as en réserve...
DWORD Count = TAILLE DE TON BUFFER; (tu fais un appel pour connaitre la taille du buffer a allouer, donc tu n'as qu'a donner ta variable contenant cette taille).
DWORD Type;
Type contiendra le type de données que tu viens de recuperer (REG_SZ...Etc).
Voila, si t'as encore des soucis, n'hesite pas, c'est avec plaisir :)
patdan
Messages postés37Date d'inscriptionlundi 20 septembre 2004StatutMembreDernière intervention 3 avril 2009 3 avril 2005 à 22:36
Encore moi!! :
J'ai essayé ton code et ayant tjrs des pbs (erreurs compil, pb exec etc...) J'ai encore bidouillé , mais mal comme dab : voilà mon code à la noix qui me rapporte tjrs le msg : "Problème" au lieu du message avec ma valeur attendue. C'est bien une string que je dois recevoir : "VBCE.ProjectRun"
HKEY hkey;
LPCWSTR param=NULL;TCHAR ch1;
long retval;
DWORD lType;
DWORD Count;
retval = RegOpenKeyEx(HKEY_CLASSES_ROOT,TEXT(".vb"),0,0,&hkey);
retval = RegQueryValueEx(hkey,TEXT("Default"),NULL,&lType,NULL,&Count);
DWORD Lg = Count;
ch1 = TCHAR(malloc(Lg*sizeof(char)));
retval = RegQueryValueEx(hkey,TEXT("Default"),NULL,NULL,(unsigned char*)ch1,&Lg);
if (retval!=0)
MessageBox (NULL,(const unsigned short*)ch1,TEXT("Info"),MB_OK);
else
MessageBox (NULL,TEXT("Problème"),TEXT("Info"),MB_OK);
RegCloseKey(hkey);
Si tu avais l'occasion de tester ce que je veux faire avec une string à toi au cas où tu n'aies pas de prog EVB sur ton pocket, ce serait certainement le mieux.Quand tu auras du temps bien sûr...
Merci encore pour tout ce que tu fais. Je n'ai jamais eu beaucoup de réponses sur ce site,( je dois poser des questions idiotes ou curieuses), par contre j'ai vu que pour critiquer ou s'insulter les réponses sont plus nombreuses hélas. Heureusement il reste des gens sérieux et serviables et on trouve tout de même souvent des choses intéressantes
Bonne soirée et bon courage
patdan
Messages postés37Date d'inscriptionlundi 20 septembre 2004StatutMembreDernière intervention 3 avril 2009 4 avril 2005 à 18:27
Merci AlexMAN. Tu m'as donné le courage de continuer et ce tout petit bout de code marche et ramène bien lachaîne attendue :
{
HKEY hkey;
TCHAR ch1[64];
long retval;
DWORD Count;
retval = RegOpenKeyEx(HKEY_CLASSES_ROOT,TEXT(".vb"),0,0,&hkey);
retval = RegQueryValueEx(hkey,TEXT("Default"),NULL,NULL,(unsigned char*)ch1,&Count);
if (retval == ERROR_SUCCESS)
MessageBox (NULL,ch1,TEXT("Info"),MB_OK);
else
MessageBox (NULL,TEXT("Problème"),TEXT("Info"),MB_OK);
RegCloseKey(hkey);
return 0;
}
Disons que j'aurais aimé ne pas donner une taille hasardeuse à ch1, mais la récupérer par Count, mais n'ayant pas réussi malgré tous mes trafics, j'arrête là pr le moment.
Merci encore 1000 fois de m'avoir aidée.
Bonne continuation.