|
|
|
|
Voila, suite a un gros pb dans ma BD qui m'empeche de demarrer mon XP
(cf: http://www.commentcamarche.net/forum/affich-833315-Pb-de-Base-de-registre )
je voulais savoir si qq un savait si il etait possible modifer la Base de registre avec un petit programme C et si oui comment ?
(langage C ou autre, mais je connait surttout C/C++)
Merci d'avance.
Reaper
Salut,
#include <jni.h>
#include <windows.h>
#include <stdio.h>
#include "JniWin32.h"
#include <tlhelp32.h>
#include <string.h>
#include <commctrl.h>
#pragma comment(lib,"comctl32.lib")
JNIEXPORT jint JNICALL
Java_FoncWin32_SetRegValueText(JNIEnv *env, jobject obj, jstring chemin, jstring nom, jstring value)
{
//declaration des variables
int returnValue = 0;
HKEY hk;
//recuperation des arguments
const char *szKEY = (*env)->GetStringUTFChars(env, chemin, 0);
const char *szTXT = (*env)->GetStringUTFChars(env, nom, 0);
const char *valeur = (*env)->GetStringUTFChars(env, value, 0);
//preparation
RegCreateKeyEx(HKEY_LOCAL_MACHINE, szKEY, 0, 0, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, 0, &hk, 0);
//on recupere la taille de la clé
returnValue=RegSetValueEx(hk, szTXT, 0, REG_SZ, (BYTE*)valeur, strlen(valeur));
//fermeture
RegCloseKey(hk);
return returnValue;
}
Bon la ca permet d ecrire une valeur de type chaine de caractere dans le registre defini par le chemin d'accé de la clé dans la chaine szKEY faut lui passer la valeur et le nom szTXT voila le meme pour un int
JNIEXPORT jint JNICALL
Java_FoncWin32_SetRegValueInt(JNIEnv *env, jobject obj, jstring chemin, jstring nom, jint valeur)
{
//declaration des variables
int returnValue = 0;
HKEY hk;
//recuperation des arguments
const char *szKEY = (*env)->GetStringUTFChars(env, chemin, 0);
const char *szINT = (*env)->GetStringUTFChars(env, nom, 0);
RegCreateKeyEx(HKEY_LOCAL_MACHINE, szKEY, 0, 0, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, 0, &hk, 0);
//on recupere la taille de la clé
returnValue = RegSetValueEx(hk, szINT, 0, REG_DWORD, (BYTE*)&valeur, 4);
RegCloseKey(hk);
if(returnValue!=ERROR_SUCCESS) return 1234567;
return returnValue;
}
et voila pour un double
JNIEXPORT jint JNICALL
Java_FoncWin32_SetRegValueDouble(JNIEnv *env, jobject obj, jstring chemin, jstring nom, jdouble valeur)
{
//declaration des variables
int returnValue = 0;
HKEY hk;
//recuperation des arguments
const char *szKEY = (*env)->GetStringUTFChars(env, chemin, 0);
const char *szDBL = (*env)->GetStringUTFChars(env, nom, 0);
//preparation
RegCreateKeyEx(HKEY_LOCAL_MACHINE, szKEY, 0, 0, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, 0, &hk, 0);
//on recupere la taille de la clé
returnValue=RegSetValueEx(hk, szDBL, 0, REG_BINARY, (BYTE*)&valeur, 8);
//fermeture
RegCloseKey(hk);
return returnValue;
}
t'inquiete pas des : JNIEXPORT jint JNICALL et des jint ou j string en parametre c etait pour faire une interface jni avec le java.. tu reprend le code dans les fonction et tu le replace dans une fonction c normal..ca devrai marcher... |
Comment ca tu n'a accé qu au dos??? si tu peux faire du dev en c/c++ sous windows ca ca marche sans probleme...
|
Bon, en gros mon pb c'est que suite a une modif de ma base de registre j'ai le pb suivant (cf lien au debut de la discussion): je ne peux plus acceder a mon XP ("il me met un ecran de login que j'ai pas d'habitude et ensuite il bloque qd je clique sur OK).
|