Récupérer le chemin de Program Files...

Récupérer le chemin de Program Files... - C++ - Programmation

Marsh Posté le 30-01-2006 à 14:52:09    

Bonjour à tous,
 
comment je peux faire pour récupérer les valeurs des dossiers de Windows?
 
Comme Program Files, Program Files\Fichiers Communs, Mes Documents?
 
Merci d'avance

Reply

Marsh Posté le 30-01-2006 à 14:52:09   

Reply

Marsh Posté le 30-01-2006 à 15:03:11    

%programfiles% ?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 30-01-2006 à 15:03:31    

(après yen a d'autres, à chercher, j'ai le flemme.:o)


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 30-01-2006 à 15:23:52    

Je trouve ça où? Dans quel entête?

Reply

Marsh Posté le 30-01-2006 à 15:24:57    

nulle part, c'est un alias de windows...[:petrus75]
Après faut voir si ça fonctionne dans le contexte de ton programme...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 30-01-2006 à 15:37:08    

Ben voilà, c'est le souci, ça ne fonctionne pas... :)
 
Je voudrais vérifier qu'un fichier existe dans un des répertoires de Windows...

Reply

Marsh Posté le 30-01-2006 à 15:39:40    

ça doit être rangé quelquepart dans le registre, alors...[:jagstang]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 30-01-2006 à 15:50:03    

Bon, ben je vais chercher alors...

Reply

Marsh Posté le 30-01-2006 à 16:10:04    

haazheel a écrit :

Bon, ben je vais chercher alors...


Salut
c'est quelque chose de ce style :

Code :
  1. char Path[MAX_PATH];
  2.    ITEMIDLIST *pt ;
  3.    SHGetMalloc((LPMALLOC *)&pt);
  4.    if (SUCCEEDED(SHGetSpecialFolderLocation(Handle, CSIDL_PROGRAMS , &pt)))
  5.    {
  6.         if (SUCCEEDED(SHGetPathFromIDList(pt, Path)))

Reply

Marsh Posté le 30-01-2006 à 16:39:32    

Trap D a écrit :

Salut
c'est quelque chose de ce style :

Code :
  1. char Path[MAX_PATH];
  2.    ITEMIDLIST *pt ;
  3.    SHGetMalloc((LPMALLOC *)&pt);
  4.    if (SUCCEEDED(SHGetSpecialFolderLocation(Handle, CSIDL_PROGRAMS , &pt)))
  5.    {
  6.         if (SUCCEEDED(SHGetPathFromIDList(pt, Path)))



 
Merci pour le code, mais j'ai des soucis de compilation avec BCB6...
 
Par contre, j'ai trouvé ce que je cherchais dans le registre:
 

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\

Reply

Marsh Posté le 30-01-2006 à 16:39:32   

Reply

Marsh Posté le 30-01-2006 à 18:34:32    

haazheel a écrit :


Par contre, j'ai trouvé ce que je cherchais dans le registre:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\



Cherche plutot dans HKEY_CURRENT_USER... si tu tiens vraiment a passer par le registre
Mais la methode de "trap D" me semble plus indiquée
( http://msdn.microsoft.com/library/ [...] cation.asp )

Reply

Marsh Posté le 30-01-2006 à 18:38:36    

Ça fonctionne parfaitement avec BCB 3, il faut inclure shlobj.h

Reply

Marsh Posté le 30-01-2006 à 21:28:19    

C'est ce que j'ai fait, mais il m'indique des erreurs dans ce fichier...
 
Et j'ai une erreur à l'exécution, mais je ne sais pas d'où elle provient...

Reply

Marsh Posté le 31-01-2006 à 10:07:09    

Quelles erreurs ??

Reply

Marsh Posté le 31-01-2006 à 10:19:01    

La méthode de Trap D est bonne :o
Le problème suivant doit être lié à Builder, sûrement parce que tu n'as pas rajouté les dossiers à inclure dans ton projet pour les .h et les .lib.

Reply

Marsh Posté le 03-02-2006 à 23:13:01    

// Avec include shlobj.h pour éviter des déclarations multiples, il faut ajouter
//  NO_WIN32_LEAN_AND_MEAN dans  Projet\Options\Répertoires/Conditions\définitions
// ex: _DEBUG;NO_WIN32_LEAN_AND_MEAN
// ou ajouter:
// #define NO_WIN32_LEAN_AND_MEAN


---------------
Je Cherche!
Reply

Marsh Posté le 07-02-2006 à 19:16:27    

AH bien vu, c'est ce qui me manquait :)

Reply

Marsh Posté le 15-02-2006 à 00:27:23    

heu?? spa une variable d'environnement??
 
int main (int argc, char ** argv, char ** arge)
{
}
en affichant arge g ca :
...
PROCESSOR_IDENTIFIER=x86 Family 6 Model 7 Stepping 3, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=0703
ProgramFiles=C:\Program Files
PROMPT=$P$G
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\WINDOWS
TEMP=C:\DOCUME~1\JRME~1\LOCALS~1\Temp
...

Reply

Marsh Posté le 16-02-2006 à 23:58:44    

Non c'est une définition spécifique à C++Builder qui permet des sélections différentes des inclusions d'entêtes de la VCL ou CLX. Infos trouvées dans différentes entêtes comme shlobj.hpp, urlmon, ...

Reply

Marsh Posté le 17-02-2006 à 00:29:51    

nan on ne s'est pas compri. Je disai juste que les variables des chemins (programmes files / communs / mes docs ) sont des variables d'environnement et elles doivent initialisées par les valeurs contenues de le registre (j'imagine).
 
C'est donc plus facile de faire de lire arge que de passer par le registre.

Reply

Marsh Posté le 17-02-2006 à 00:43:03    

     En effet je n'avais pas compris. Pourquoi utiliser «SHGetSpecialFolderLocation» plutôt que les variables d'environnement permet d'espérer que si il y a des modifications dans la façon de gérer les dossiers utilisés par windows, elles seront seront prises en compte par la nouvelle version de cette fonction de l'API.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed