IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Windows Discussion :

Clés de registre Windows : WinForm vs WPF


Sujet :

Développement Windows

  1. #1
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut Clés de registre Windows : WinForm vs WPF
    Bonjour,

    j'ai besoin de récupérer ma Product Key de Windows 7 pour une réinstall. Une petite recherche gogole plus tard on me propose d'utiliser n applications tiers, et étant dev je préfère le faire moi-même. Je trouve donc l'entrée dans le registre qui contient l'info (LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion@DigitalProductId) et je me lance dans la création d'une mini-appli. Première jetée en WinForm (j'avais un projet poubelle d'ouvert) : aucun souci. Je me dis alors "tiens, pourquoi pas faire un truc joli en WPF, vu que je viens de découvrir le truc". Et là y'a souci : j'accède bien à la clé CurrentVersion, mais elle ne possède pas l'entrée DigitalProductId. Je fais alors un Length des noms dispo pour la clé et j'en ai que 17 (au lieu de 21). Au cas où, je lance l'exe généré en mode admin : aucune différence.

    Du coup je lâche le WPF, ou y'a un truc à faire ?

    Merci d'avance

    edit : me suis dit "allez, je fais un truc rapide en WinForm en attendant" et surprise ! Ma nouvelle appli WinForm se comporte comme mon appli WPF ... y'a que mon appli poubelle qui me renvoie le bon nombre de valeurs.
    Plus je connais de langages, plus j'aime le C.

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Re,

    alors après comparaison des paramètres de mes projets j'ai trouvé d'où vient le souci (qui n'a pour le coup aucun rapport avec une dissociation WinForm/WPF).

    Dans les param' du projet, onglet "Générer", panel "Général", il faut décocher "Préférer 32 bits" (pour info je suis en Any CPU).
    Me demandez pas le pourquoi du comment, ça fonctionne et ça me suffit

    edit : le code de la fonction qui va bien, si ça intéresse quelqu'un un jour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    public static string GetProductKey() {
    	RegistryKey key = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", false);
    	byte[] digitalProductId = (byte[])key.GetValue("DigitalProductId");
    	const int keyStartIndex = 52;
    	const int keyEndIndex = keyStartIndex + 15;
    	char[] digits = new char[] {
    		'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'M', 'P', 'Q', 'R', 
    		'T', 'V', 'W', 'X', 'Y', '2', '3', '4', '6', '7', '8', '9',
    	};
    	const int decodeLength = 29;
    	const int decodeStringLength = 15;
    	char[] decodedChars = new char[decodeLength];
    	ArrayList hexPid = new ArrayList();
    	for (int i = keyStartIndex; i <= keyEndIndex; i++) {
    		hexPid.Add(digitalProductId[i]);
    	}
    	for (int i = decodeLength - 1; i >= 0; i--) {
    		if ((i + 1) % 6 == 0) {
    			decodedChars[i] = '-';
    		} else {
    			int digitMapIndex = 0;
    			for (int j = decodeStringLength - 1; j >= 0; j--) {
    				int byteValue = (digitMapIndex << 8) | (byte)hexPid[j];
    				hexPid[j] = (byte)(byteValue / 24);
    				digitMapIndex = byteValue % 24;
    				decodedChars[i] = digits[digitMapIndex];
    			}
    		}
    	}
    	return new string(decodedChars);
    }
    Plus je connais de langages, plus j'aime le C.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 08/07/2014, 16h02
  2. [Windows]accès base de registre windows
    Par Greg01 dans le forum API standards et tierces
    Réponses: 27
    Dernier message: 05/06/2007, 15h14
  3. Accès à la base de registre windows à distance
    Par xavame dans le forum Sécurité
    Réponses: 4
    Dernier message: 13/07/2005, 15h23
  4. Questions sur les clés de registre
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 30/04/2005, 19h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo