[Programmation] Base de registre.

Répondre
Partager Rechercher
Salut.
J'expose mon problème:
Je fais une application sous MS ACCESS, et j'ai besoin de créer un bouton de commande qui va lancer une application.
Cela dit, cette application peut avoir des chemins d'accès différents selon les ordinateurs.
Je sais de source sûre qu'ACCESS "retrouve tout seul" le chemin d'accès de l'application puisque quelle que soit la machine, quand on double clique sur l'objet OLE correspondant à ladite application, celle-ci se lance toute seule comme une grande.

J'ai donc besoin d'aide pour associer l'application à un bouton de commande et que ça marche même si le chemin d'accès varie selon les ordis.

Merci d'avance.
(C'est beau Windows tout de même.)

Quelle application ?
Il n'y a aucun moyen standard de retrouver le chemin d'une application, donc si tu ne précise pas de quelle application tu parles, on ne pourra pas t'aider.

Edit : À la vue de la réponse de Kathandro, je me demande si j'ai bien compris le problème. "Cette application", c'est bien une application étrangère qui n'est pas de toi ?
Tu imposes aux utilisateurs de mettre leur appli dans un certain répertoire par exemple C:\Appli ACCESS faite par Deirdre\ (ceci n'est qu'un exemple).

Ou alors, tu mets les ordis en réseaux, et tu balances tout sur le réseau (mais pb de vitesse quand la connexion est défaillante )
En gros, tu veux savoir où est stocké dans Windows le programme associé à une extension ?
De par mon expérience :

HKCR\{extension}\{Défaut} te donne un nom plus ou moins interne (je n'ai aucune idée comment le modifier)

HKCR\{Nom}\Shell\Ouvrir\command\{Défaut} te donne la commande associée.
Donc, normalement $0 de cette chaîne te donnera le chemin complet de l'application.

[Edit : Après, pour aller voir la base de registre en VBA, je ne connais pas assez ce langage pour savoir comment on fait. Mais vu le titre que tu as marqué, je ne doute pas que tu saches, toi ]
Voici qques précisions.

L'application en question s'appelle Isis Draw, c'est un logiciel gratuit qui permet de "dessiner" des composés chimiques.
Ces composés peuvent être importés dans une base MS ACCESS en tant qu'objet OLE.

Lorsqu'on importe une molécule, et qu'on double clique dessus dans un formulaire, le logiciel Isis Draw se lance tout seul, et édite la molécule.

Le problème est que sur un enregistrement nouveau, ACCESS sait juste qu'il y a dans ce champs un objet OLE.
Je voulais faire un bouton de commande qui permette de lancer le fameux Isis Draw.
C'est très facile à faire, cependant, le chemin d'accès à l'exécutable est mis en dur dans le code VB du bouton de commande.
Ainsi, si on copie la base de données sur un ordinateur où le chemin vers Isis Draw n'est pas le même, le bouton ne sert plus à rien et on est coincé.
Alors que le double clic sur l'objet OLE de type "Isis/Draw Sketch" provoque toujours le lancement d'Isis Draw quelque soit le pc et le chemin d'accès à l'exécutable d'Isis Draw.

Voila.
Merci en tous cas de votre aide
En regle général, lorsque l'on désire ce genre de chose, on associe un fichier (plus ou moins facile d'acces au fouineur : nom, extension, cryptage etc ... mais tout ca c'est le marteau piqueur pour casser une noisette), dans lequel on mémorise le chemin d'accès de l'appli et des différents fichiers utiles.

Ton bouton n'a plus qu'à lire ce fichier pour savoir où il doit aller.


La deuxieme solution est la lecture de la base de registre.

Dors et déjà le chemin de cette clef est HKEY_LOCAL_MACHINE\SOFTWARE\
puis le nom de l'appli, pour finir généralement par une clef en InstallFile, ou PathToExe de valeur : le chemin de l'appli sur le dur.

Quant à savoir comment le lire : en C++ sous Borland, on fait habituellement une recherche par RegOpenKeyEx, qui ouvre une section du registre. RegQueryValueEx, qui lit le contenu d'une variable de cette section, puis RegCloseKey, qui ferme et update la section.

Pour chercher cette variable il y a (de mémoire, mais jamais utilisé) un RegSearchKeyEx.

La troisieme et moins bourrine :
creer ta propre clef a l'install sur le nouveau PC.
Là tu recherche sur le disque dur le nom de l'exe (une recherche arborescente est simple a faire faire, mais tu peux laisser le choix a l'utilisateur (style recherche manuelle ou auto)).
tu la mémorise dans la clef
a chaque plantage d'ouverture de l'exe, le bouton demande si l'utilisateur veut qu'il cherche lui meme l'exe, ou s'il sait où il se situe. Si l'user est une feignasse, le soft reparcours le HDD a sa recherche.
La fin est un update du registre avec la nouvelle adresse.


Voila voila.

Je ne sais pas si cela va t'avancer a grand chose mais bon.
Pourquoi pas tout simplement demander a l'installation de spécifier ou est installer isis machin et de stocker cette info dans un fichier texte... ?
Bon, tu fais un second bouton pour demander le chemin d'accès à Isis Draw.
Ton second bouton, il va lancer une InputBox où tu demandera le répertoire et ensuite une seconde InputBox pour le nom de l'exécutable...
Bon, après c'est simple, je te laisse faire (c'est comme ça que j'ai fait en stage )
J'avais en effet provoqué l'affichage d'un champ pour demander le chemin d'accès dans le cas où le chemin initial n'était pas le bon, mais ça obligeait l'utilisateur à connaitre le chemin d'accès.
J'explorerai dès lundi la piste du fichier txt qui contient le chemin.

Merci à tous pour votre aide
Quelqu'un saurait si on peut (et si oui comment) faire apparaitre un explorateur windows (comme celui qui apparait quand on veut ouvrir ou enregistrer un fichier) qui permettrait de trouver le chemin du logiciel?

Merci.
Je vais peut être dire une connerie mais bon...

J'imagines que ton fichier Isis Draw a une extension particulière qui fait que Isis Draw est le programme par défaut qui va l'ouvrir.

Si oui, je vois pas où est le problème, ton formulaire contient un champ objet OLE, tu double clique dessus pour ouvrir dans le bon programme, sans avoir besoin d'une recherche, c'est win qui s'en occupe... Ca fonctionne nickel avec des fichiers images (je viens de faire le test, il s'ouvre dans acdsee, ok, pas eu besoin de préciser quoi que ce soit )
Citation :
Provient du message de Deirdre
C'est exact.
Mon problème est que quand on crée un nouvel enregistrement, le champ OLE est vide, et donc, quand on double clique dessus, ça ne lance rien.
Tu ne peux pas mettre un objet OLE Isis Draw vide par défaut quand tu crées un nouveau enregistrement de ta base de donnée?

C'est une idée sans réfléchir très loin, je suis très fatiguée en ce moment.
Citation :
Provient du message de Coquette
Tu ne peux pas mettre un objet OLE Isis Draw vide par défaut quand tu crées un nouveau enregistrement de ta base de donnée?

C'est une idée sans réfléchir très loin, je suis très fatiguée en ce moment.
J'avais déjà essayé, mais les champs OLE n'acceptent pas de valeur par défaut.
Merci quand même
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés