CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C/C++] Copier un .exe

Chaos_Clad
Chaos_Clad
Niveau 10
30 octobre 2004 à 13:56:45

:salut:

Je voudrai savoir comment il faut faire pour compiler un code source en C++ qui créerait un exécutable ( logique) mais qui en plus se copierait dans un répertoire précis ( vous me suivez ? )

Exemple :

Compile, linke etc.
On sort un . exe
Ce . exe ( quand on le lance) se copie dans un répertoire spécifié.

On m´a dit qu´il fallait utiliser des fonctions dos prédéfinies dans la liib C, j´y ai regardé mais je n´ai pas trouvé mon bonheur, et sur Google je n´ai pas trouvé de tutos pour ça :malade:

Bref, pour tout vous dire je voudrai que ce programme se copie dans le répertoire Démarrage de Windows ( ne vous inquiétez pas je ne veux pas faire de gros virus trop méchants qui détruisent tout, juste une blague à un copain ^^).
Or, ce répertoire se trouve ( sous XP) dans

C://Documents and Settings/User/Menu Démarrer/Programme/

le problème étant que je connais pas " User" ( eh oui je ne connais pas le nom de la station de travail :/) donc je voudrai savoir s´il y avait un autre moyen d´y accéder, merci :)

Altonfrere
Altonfrere
Niveau 10
30 octobre 2004 à 14:12:54

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shgetfolderpath.asp

mais on ne copie pas des programmes dans le menu Démarrer ! ! seulement des raccourcis..

si c´est pour lancer ton programme au démarrage de windows ya mieux . .. suffit de créer un clé en base de registre dans :

HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre
ntVersion\Run

tu y mets le chemin vers ton programme

Chaos_Clad
Chaos_Clad
Niveau 10
30 octobre 2004 à 14:14:52

Euh ok c´est sympa de vouloir m´aider mais niveau prog je suis un newbie débutant :D J´exagère peut-être un peu mais modifier une clé dans la base de registre je sais pas faire moi :)

Altonfrere
Altonfrere
Niveau 10
30 octobre 2004 à 14:21:28

ah ok désolé :)

voici le bout de code pour faire ca :

HKEY hKey;
char *pCheminVersTonProgramme = " C:\LeChemin\Vers\Ton\Programme.exe";

if (
RegOpenKey(HKEY_CURRENT_USER,"Software\\Microsoft\
\Windows\\CurrentVersion\\Run",&) == ERROR_SUCCESS )
{
if
(Je_veux_lancer_mon_programme_au_demarrage_de_Wind
ows)

RegSetValueEx(hkey,"UnNomPourMonProgramme",0,REG
_SZ,(unsigned char

  • )pCheminVersTonProgramme,strlen(pCheminVersTonPro

gramme));
else
RegDeleteValue(hkey,"UnNomPourMonProgramme");

RegCloseKey(hkey);
}

dnob700
dnob700
Niveau 10
30 octobre 2004 à 15:00:25

altonfrère, ça va pas, car il ne connait pas le chemin vers son exécutable.

si vous voulez, j´ai écrit une lib sympa pour un accès ultra-simplifié à la base des registre et quelques autres petites fonctions ( presse papier entre autre) que je peut vous passer.

mais pour avoir le nom de l´utilisateur il suffit d´utiliser la fonction GetUserName :

long size=128;
char name[128];
GetUserName(name,(LPDWORD)&);

et name contient le nom par lequel il faut remplacer user.

Altonfrere
Altonfrere
Niveau 10
30 octobre 2004 à 15:02:49

bin pour le chemin vers son exe suffit d´utiliser la fonction :

char ModulePath[_MAX_PATH];
GetModuleFileName(NULL,ModulePath,MAX_PATH);

MathieuN7
MathieuN7
Niveau 10
30 octobre 2004 à 17:20:02

sinon pour faire ce qe tu veux, si tu vas ici:

C:\Documents and Settings\All Users\Menu Démarrer\Programmes\Démarrage

Tu crées un raccourci vers le programme ( ou tu copies ton programme dedans, comme tu veux) jpense que ça peut fonctionner non?

Altonfrere
Altonfrere
Niveau 10
30 octobre 2004 à 18:09:34

Je vois toujours pas l´intérêt de copier un programme complet dans le menu démarrer ! on y met des raccourcis à la limite mais c´est tout !

Sinon pour la base de registre je n´y vois aucun problème, c´est plus propre car suivant le windows sur lequel vous allez faire la manip le répertoire Démarrer peut s´appeler StartUp ou Start ( pour la version anglaise) etc... Bon il existe également une fonction pour récupérer le répertoire démarrer quelle que soit la traduction . ..

dnob700
dnob700
Niveau 10
30 octobre 2004 à 18:22:19

le menu démarer est donné par une clef dans la base des registres. ce qui nous fait revenir au problème précédent.

dans HKCU :
"Software\Microsoft\Windows\CurrentVersion\Explore
r\Shell Folders"
valeur " Startup"

MathieuN7
MathieuN7
Niveau 10
30 octobre 2004 à 18:52:57

y a un truc qui renvoit vers le dossier . ..\Mathieu ( pour moi):

%HOMEDRIVE%%HOMEPATH%, tu px pas t´en servvir?

Chaos_Clad
Chaos_Clad
Niveau 10
31 octobre 2004 à 18:10:41

Ben dis-donc c´est bien plus compliqué que ce que j´imaginais, je vais me pencher sur le problème :)

Pour GetUserName, il faut quelle lib ?

Merci à vous :)

dnob700
dnob700
Niveau 10
31 octobre 2004 à 19:58:54

windows.h

mais effectivement le truc de mathieu marche très bien, il faut juste utilisé la fonction qui permet de remplacer le %truc% par leur valeur, je me souviens plus de la fonction, l´une des méthode est de passer par le registre.

Mais en exclusivité rien que pour toi, voici LA fonction : extraite toute droit de la MSDN avec la librairie la plus bizarer que j´ai jamais vu, pourtant ça marche parfaitement.

  1. include < shlobj.h>
  2. include < iostream.h>

void main()
{
char chem[MAX_PATH];

SHGetFolderPath(NULL,CSIDL_STARTUP,0,SHGFP_TYPE_CU
RRENT,chem);
cout < < chem;
cin > > chem;
}

dnob700
dnob700
Niveau 10
31 octobre 2004 à 19:59:33

le truc qui est coupé en 2 est une seule constante :
SHGFP_TYPE_CURRENT

dnob700
dnob700
Niveau 10
31 octobre 2004 à 20:10:38

je viens de tester avec devc++ le problème c´est que SHGFP_TYPE_CURRENT n´est pas défini, donc mets sa valeur, c´est 0

SHGetFolderPath(NULL,CSIDL_STARTUP,0,0,chem);

elle est bizarre cette fonction, elle sort pas de l´API win32, mais d´un truc qui s´appelle le windows shell, j´ai jamais vraiment prété attention à ça avant et je vois pas trop à quoi ça correspond.

Chaos_Clad
Chaos_Clad
Niveau 10
31 octobre 2004 à 20:45:29

Je crois que je vais aller me rhabiller :D

Enfin merci quand même :)

MathieuN7
MathieuN7
Niveau 10
31 octobre 2004 à 21:16:06

C´est quoi ce MAX_PAH? ça fait 2-3 fois que je le vois, et je ne comprends pas à quoi elle sert

dnob700
dnob700
Niveau 10
31 octobre 2004 à 22:38:04

chaos_clad, il suffit que tu utilise les 3 lignes que je t´ai passé et ça marche parfaitement sans aucun problème.

Mathieu : MAX_PATH c´est juste une constante définit par les en tête standard ( genre windows.h ou autre) qui définit la taille maximale en nombre de caractère que peut faire un chemin d´accès.

essaye de créer une arborescence avec des nom de dossier très très long et tu verra que vers 250 caractères, tu ne peut plus créer de dossier.

Chaos_Clad
Chaos_Clad
Niveau 10
31 octobre 2004 à 23:00:12

Oui ça marche, mais recopier bêtement c´est pas trop mon truc :)

dnob700
dnob700
Niveau 10
31 octobre 2004 à 23:12:28

bah dans ce cas là, je t´explique :

c´est tout con : la fonction fait exactement ce que tu veux elle te renvoie le chemin d´accès pour un dossier donnée.

le premier paramètre doit être null ( en fait c´est un hwnd mais il ne sers à rien si l´appli tourne avec le même nom d´utilisateur que celui qui est ouvert) le deuxième paramètre est une constante qui identifie la chaine que tu veux, le troisième argument est l´utilisateur auquel tu te réfers, celui en cours si le paramètre est 0.

Le 4ième arguments est si tu veux avoir le vrai chemin ( 0) où le chemin par défaut ( 1) et en dernier un buffer de la bonne taille.

voila, maintenant que tu as compris ce n´est plus recopier betement.

En plus, tu ne trouvera pas mieux comme fonction, et en info c´est en recopient qu´on apprend ( en faisait aussi, mais une fonction que tu connait pas, il faut bien qu´un jour qqn te la montre).

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment