[resolu]Mettre le programme au démarrage de Windows (avec le registre)
Forum Programmation : [resolu]Mettre le programme au démarrage de Windows (avec le registre)
Bonjour, a tous et à toutes.
J'ai un probleme, pour mettre mon programme au démarrage pour XP ET Vista.
Sous XP, aucun probleme. Je crée un programme tout simple qui éxecute le vrai (avec start) dans Programmes > Démarrage.
Mais pour Vista j'ai beau le mettre dans "C:\Users\Admin\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Démarrage", mais là il me vré un autre dossié Démarrage !!!! (Il y a deux dossier au meme emplacement qui ont le même nom !) mais au démarrage il ne le prend pas en compte.
Donc j'ai pensé au Registre mais je ne sais pas comment m'en servir avec regedit alors je vous dis pas ce que ça donne en C.
Donc si il y en a qui savent comment ajouter au registre un programme au démarrage de windows, n'hésitez pas !
EDIT: Maintenant je sais comment faire avec regedit (http://www.commentcamarche.net/faq [...] e-registre) mais en C ...
Merci !
Message édité par ptitcois le 31-05-2008 à 11:05:38
RegOpenKeyEx, RegSetValueEx, RegCloseKey
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
euhh, je peux avoir un petit exemple si c'est pas trop demandé
?
Exemple pour l'autorun d'xp :
Code :
|
Message édité par jerbe le 29-05-2008 à 20:40:46
mes autres sites : http://jeremy1000.free.fr > http://jybforum.free.fr
Répondre à jerbe
Euhh, je crois que j'ai compris, mais pour donner la clé à écrire c'est avec KEY_WRITE non ? Sinon, c'est avec quelle bibliotheque ?
En fait j'ouvre d'abord la clef en écrituer avec KEY_WRITE
et pour l'écrire j'utilise la fonction RegSetValueEx();
après le reste sont des tests pour vérifier que ça marche et tout.
La bibliothèque est tout simplement windows.h il me semble.
Ok, merci bien
Sinon, quel type de variable il faut mettre pour mattre une chaîne de caracter ?
J'ai éssayé SZ et REG_SZ, mais ça ne fonctionne pas, tu n'aurais pas de la doc sur ça ?
Message édité par ptitcois le 30-05-2008 à 15:10:29
RESOLU !
Avec MS-DOS, (pour ceux qui veulent savoir) il faut mettre:
Code :
|
(code non testé)
voila !
Message édité par ptitcois le 31-05-2008 à 11:28:51
les chemins sont à séparer par des \
|
Message édité par coca25 le 31-05-2008 à 11:32:34
Penser à voir les tutos, ca peut aider!
Répondre à coca25
c'était bien la peine que je ponde un code en C ... lol
| coca25 a écrit : les chemins sont à séparer par des \
|
Oui, mais moi je parle en C avec la fonction system()
@jerbe: désolé mais je trouve plus simple de passer par MS-DOS
Message édité par ptitcois le 31-05-2008 à 20:57:00
| ptitcois a écrit : Oui, mais moi je parle en C avec la fonction system() |
je ne parlais pas de ne pas doubler le \, j'avais pas vu ton message après ton édition, tu avais mis des / au lieu de \
| ptitcois a écrit :
|
(il faut arreter de parler de ms-dos la ou il n'y en a pas
)
Message édité par coca25 le 31-05-2008 à 21:04:32
Penser à voir les tutos, ca peut aider!
Répondre à coca25
oui, escuse moi, j'ai édité par ce que ça ne fonctionnait pas.
Désolé si tu joue sur les mots:
@jerbe: désolé mais je trouve plus simple de passer par [des commandes] MS-DOS
t'inquiète, c'est pas grave.
C'est surtout dommage de passer par une console pour faire ce que C sait faire.
Sinon moi ça ne me gène pas du tout !
| Citation : (il faut arreter de parler de ms-dos la ou il n'y en a pas |
On pourrait débattre là-dessus (int 21h
), mais c'est pas le sujet
Je trouve étonnant de programmer en C et de faire appel à l'interpréteur de commandes pour simplement mettre à jour une clé dans la base de registre...
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
bah, de toute facon, le sujet est clos si j'ai bien suivi
ce n'est pas sur l'utilisation ou non des commandes et interruptions héritées de msdos que je parle, c'est le fait que msdos est un système d'exploitation qui n'existe plus, dans le sens ou win xp ne fait qu'émuler (notamment l'int 21h) de ms dos pour ce qui lui est propre et les commandes portant le même noms sont des réécritures.
ca me gène pas plus que ca, mais je pense que c'est une incompréhension (par exemple le fait que ptitcois parle de "commandes msdos" ) qui mérite d'etre corrigée.
je trouve que c'est comparable à dire que j'utilise msdos si je lance un "cd" sous un shell linux
Penser à voir les tutos, ca peut aider!
Répondre à coca25
Concernant l'interruption 21h, ça a toujours été une interruption logicielle, et ça le restera. Donc, la couche la plus basse du DOS est toujours la même.
Ce qui change c'est la couche juste au dessus (le noyau NT) qui est effectivement est la majeure partie de l'OS.
L'interpréteur de commande de windows n'est aussi qu'une évolution de l'interpréteur de commandes de MS-DOS.
Effectivement comme tu le dis, le MS-DOS était un OS, et on confondait facilement l'interpréteur de commandes avec l'OS, comme aujourd'hui on confond l'OS windows avec l'environnement graphique.
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
| CRicky a écrit : Concernant l'interruption 21h, ça a toujours été une interruption logicielle, et ça le restera. Donc, la couche la plus basse du DOS est toujours la même. |
je te l'accorde volontiers, je m'y connais pas tellement pour ce qui touche l'assembleur et cie, tout au plus des essais de redémarrage de pc et un pauvre programme à l'époque où il fallait attendre le rafraîchissement de l'écran pour changer d'image, et encore, il était pompé d'un bouquin
toujours est il qu'on est d'accord sur le fond:
| CRicky a écrit :
|
mais bon tout ca, c'est la faute à bill, il aurait mis un autre fond, une autre invite et appelé son système d'un autre nom que le logiciel...
Penser à voir les tutos, ca peut aider!
Répondre à coca25
bon désolé je me recorrige:
@jerbe: désolé mais je trouve plus simple de passer par [des commandes de Microsoft (R) (TM) (C All rights reserved 1980 - 2008) Windows (R) .....]
content ?
désolé pour les dates dus copyright de MS je connais pas
.
@Cricky: oui, je sais, mais j'étais pressé et je trouvait la commande Microsoft (r) ..... plus simple.
Mais je vais voir de plus près la fonction prévu pour le C.
Message édité par ptitcois le 02-06-2008 à 18:07:53
| ptitcois a écrit : bon désolé je me recorrige:
|
en fait, ca me fait ni chaud ni froid, ce n'était rien d'autre qu'une remarque (on en a encore le droit?), mais tu peux continuer à appeler une cuillère, fourchette, ca ne me dérange pas du tout
Penser à voir les tutos, ca peut aider!
Répondre à coca25
ah, bah je croyait que ça te dérrangeais mais, si ça ne te fais rien tant mieux (de toute façon tu m'avais compris non ?)
l'essentiel c'est que tout le monde se comprenne.
Sinon c'est une bonne idée de creuser un peu le code en C, ça te permettra de progresser un chti peu.
Euhh j'ai un petit probleme, quand je met SZ à la place de DWORD a la déclaration (ligne 2) (voir ton exemple au dessus) il me dit: SZ undeclared
alors que j'ai bien inclut windows.h
Eu, je crois que tu t'es mélangé les pinceaux.
Si tu veux faire du SZ, il faut juste mettre REG_SZ à la ligne 7
j'ai pas vérifier dans la doc, mais je suis presque sur que c'est REG_SZ
(ça fait un moment que j'ai pas utilisé ces truc là)
Message édité par jerbe le 02-06-2008 à 19:51:07
mes autres sites : http://jeremy1000.free.fr > http://jybforum.free.fr
Répondre à jerbe
mais si je met une chaine de caractere dans un DWORD
DWORD Etat; |
et si je mets:
Etat = "C:\\JeSaisPasQuoi"; |
je penses qu'il ne va pas accepter
Si je me trompe, tu peux faire un Exemple avec un SZ
EDIT, eh oui:
Message édité par ptitcois le 02-06-2008 à 20:04:01
| ptitcois a écrit : mais si je met une chaine de caractere dans un DWORD
et si je mets:
je penses qu'il ne va pas accepter
|
tu essaies d'assigner une chaine de caractères (donc un pointeur char *) sur une valeur DWORD.
Un pointeur étant une adresse mémoire codée sur 4 octets, comme le DWORD, la conversion est théoriquement possible, mais Etat ne contient pas la chaine, mais l'adresse où est écrite la chaine. La norme ansi C suggère (en annexe) aux compilateurs de mettre un warning, car il est plus probable que ce soit une erreur de programmation (ce qui est le cas ici).
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Bon, comme tu m'as l'aire relativement paumé je te remet un autre exemple plus simple avec une valeur string
Code :
|
(j'ai ouvert la clef en ALL_ACCESS : donc lecture, écriture)
Plus d'info ici : http://msdn.microsoft.com/en-us/li [...] S.85).aspx
Message édité par jerbe le 02-06-2008 à 21:01:42
mes autres sites : http://jeremy1000.free.fr > http://jybforum.free.fr
Répondre à jerbe
merci beaucoup jerbe
Il y a 2051 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
