Tom's Guide > Forum > Programmation > [resolu]Mettre le programme au démarrage de Windows (avec le registre)

[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)

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

RegOpenKeyEx, RegSetValueEx, RegCloseKey

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

euhh, je peux avoir un petit exemple si c'est pas trop demandé :D ?

Répondre à ptitcois

Exemple pour l'autorun d'xp :

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


Message édité par jerbe le 29-05-2008 à 20:40:46
------------------------------ Venez jouer sur mon site : http://www.gugusland.com
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 ?

Répondre à ptitcois

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.

Répondre à jerbe

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 ?


Message édité par ptitcois le 30-05-2008 à 15:10:29
Répondre à ptitcois

RESOLU !
Avec MS-DOS, (pour ceux qui veulent savoir) il faut mettre:

Code :
  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 !


Message édité par ptitcois le 31-05-2008 à 11:28:51
Répondre à ptitcois

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"

Message cité 1 fois
Message édité par coca25 le 31-05-2008 à 11:32:34
------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

c'était bien la peine que je ponde un code en C ... lol

Répondre à jerbe

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 cité 1 fois
Message édité par ptitcois le 31-05-2008 à 20:57:00
Répondre à ptitcois

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 :


@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)


Message édité par coca25 le 31-05-2008 à 21:04:32
------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
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

Répondre à ptitcois

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

Répondre à jerbe

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...

------------------------------ 6800A007B81300CD10B00131C989CF26880541
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 ;)

------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
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. :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.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
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. :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 écrit :


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:

------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
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 :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.

Message cité 1 fois
Message édité par ptitcois le 02-06-2008 à 18:07:53
Répondre à ptitcois

ptitcois a écrit :

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 ;)

------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
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 ?)

Répondre à ptitcois

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.

Répondre à jerbe

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

Répondre à ptitcois

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
------------------------------ Venez jouer sur mon site : http://www.gugusland.com
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:
http://ptitcois35.free.fr/screenshoots/dword.png

Message cité 1 fois
Message édité par ptitcois le 02-06-2008 à 20:04:01
Répondre à ptitcois

ptitcois a écrit :

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).

------------------------------ 6800A007B81300CD10B00131C989CF26880541
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 :
  1. HKEY  hKey;
  2. char valeur[99] = "abcdef";
  3. if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services\\Cdrom",  0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
  4.     {
  5.     if(RegSetValueEx(hKey, "AutoRun", 0, REG_SZ, valeur, lstrlen(valeur)) == ERROR_SUCCESS)
  6.           RegCloseKey(hKey);
  7.     }
 

(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
------------------------------ Venez jouer sur mon site : http://www.gugusland.com
mes autres sites : http://jeremy1000.free.fr > http://jybforum.free.fr
Répondre à jerbe

merci beaucoup jerbe :D :D

Répondre à ptitcois
Tom's Guide > Forum > Programmation > [resolu]Mettre le programme au démarrage de Windows (avec le registre)
Aller à :

Il y a 2051 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens