Votre question

[resolu]Mettre le programme au démarrage de Windows (avec le registre)

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
29 Mai 2008 18:58:42

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/sujet-10341-lancer-un-programme-au-demarrage-via-la-base-de-registre) mais en C ...
Merci !

Autres pages sur : resolu mettre programme demarrage windows registre

a b L Programmation
29 Mai 2008 19:16:43

RegOpenKeyEx, RegSetValueEx, RegCloseKey
29 Mai 2008 20:21:58

euhh, je peux avoir un petit exemple si c'est pas trop demandé :D  ?
Contenus similaires
29 Mai 2008 20:39:35

Exemple pour l'autorun d'xp :

  1. HKEY hKey;
  2. DWORD Etat;
  3. Etat = 1;
  4.  
  5. if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\Cdrom", 0, KEY_WRITE, &hKey) == ERROR_SUCCESS)
  6. {
  7. if(RegSetValueEx(hKey, "AutoRun", 0, REG_DWORD, (LPBYTE)&Etat, sizeof(Etat)) == ERROR_SUCCESS)
  8. RegCloseKey(hKey);
  9.  
  10. }
30 Mai 2008 07:32:52

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 ?
30 Mai 2008 13:02:20

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.
30 Mai 2008 14:21:29

Ok, merci bien :D 
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 ?
31 Mai 2008 11:04:28

RESOLU !
Avec MS-DOS, (pour ceux qui veulent savoir) il faut mettre:
  1. system("REG ADD HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run /v BlocNote /t REG_SZ /d c:\\WINDOWS\\System32\\notepad.exe");
  2. /* Ca va mettre le bloc note au démarrage:
  3. /v Nom
  4. /t Type
  5. /d Donné /*

(code non testé)
voila !
31 Mai 2008 11:32:10

les chemins sont à séparer par des \

reg add hklm\software\microsoft\windows\currentversion\run /v BlocNote /t REG_SZ /d "%systemroot%\system32\notepad.exe"
31 Mai 2008 11:40:54

c'était bien la peine que je ponde un code en C ... lol
31 Mai 2008 20:56:19

coca25 a dit :
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
31 Mai 2008 21:04:09

ptitcois a dit :
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 dit :

@jerbe: désolé mais je trouve plus simple de passer par MS-DOS

(il faut arreter de parler de ms-dos la ou il n'y en a pas :o )
31 Mai 2008 22:53:01

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
31 Mai 2008 23:18:34

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 ! :D 
a b L Programmation
1 Juin 2008 14:03:36

Citation :
(il faut arreter de parler de ms-dos la ou il n'y en a pas :o )
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...
1 Juin 2008 15:36:53

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 ;) 
a b L Programmation
1 Juin 2008 18:21:36

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. :p 
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.
1 Juin 2008 19:09:18

CRicky a dit :
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. :p 

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 dit :

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.


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... :whistle: 
2 Juin 2008 18:04:11

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 :p  .
@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.
2 Juin 2008 18:19:24

ptitcois a dit :
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 :p 

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 ;) 
2 Juin 2008 18:36:44

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 ?)
2 Juin 2008 19:19:55

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.
2 Juin 2008 19:36:34

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
2 Juin 2008 19:50:48

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à)
2 Juin 2008 19:59:35

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:
a b L Programmation
2 Juin 2008 20:24:02

ptitcois a dit :
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:
http://ptitcois35.free.fr/screenshoots/dword.png

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).
2 Juin 2008 20:58:39

Bon, comme tu m'as l'aire relativement paumé je te remet un autre exemple plus simple avec une valeur string

  1. HKEY hKey;
  2. char valeur[99] = "abcdef";
  3.  
  4. if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\Cdrom", 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
  5. {
  6. if(RegSetValueEx(hKey, "AutoRun", 0, REG_SZ, valeur, lstrlen(valeur)) == ERROR_SUCCESS)
  7. RegCloseKey(hKey);
  8. }


(j'ai ouvert la clef en ALL_ACCESS : donc lecture, écriture)
Plus d'info ici : http://msdn.microsoft.com/en-us/library/ms724923(VS.85).aspx
2 Juin 2008 21:08:11

merci beaucoup jerbe :D  :D 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS