IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

en C avoir acces au repertoire windows


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2020
    Messages : 18
    Par défaut en C avoir acces au repertoire windows
    bonjour
    Suite au confinement, je me remet au C, histoire de passer le temps .

    je cherche l'equivalent de "Application.GetOpenFilename" (VBA) mais en C
    je voudrais dans mon programme en C, lancer explorateur windows , selectionner un programme editable (texte), et mettre le chemin dans une variable.
    j'ai parcourus beaucoup de tuto, mais pas de solution.

    si vous avez une solution, qui ne soit comprehensible au debutant
    merci

    bon dimanche

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 768
    Par défaut
    Impossible à faire

    Parce que, comme tu fais appel à une fenêtre Windows, il faut utiliser l'API graphique de Windows Donc, au choix, Win32/ WinAPI (C), MFC (C++ - C with Classes), ATL (C++ template), Winforms (C#), WPF (C#) et peut-être Xamarin, UWP
    Et cela c'est pour le natif tu as aussi les autres bibliothèques : Qt (C++/ QML), VCL (Delphi ou C++), FireMonkey - FMX (Delphi), GTK/ Gnome (C), wxWidgets (???) ...

  3. #3
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2020
    Messages : 18
    Par défaut
    merci pour ta réponse rapide.

    dommage, je vais rester en VBA.

  4. #4
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 667
    Par défaut
    Bonjour,

    En C et windows, l'api GetOpenFileName() simplement.
    https://docs.microsoft.com/en-us/win...s-dialog-boxes
    En version moderne https://docs.microsoft.com/en-us/pre...76913(v=vs.85)

  5. #5
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 768
    Par défaut
    Citation Envoyé par kaitlyn Voir le message
    En C et windows, l'api GetOpenFileName() simplement.
    Effectivement c'est simple mais en réalité, il faut initialiser une fenêtre principale (avec la boucle des messages, les évènements, ...) et appeler la fenêtre "Parcourir"/ "Ouvrir"/ "Enregistrer sous"/ ...
    Cette fenêtre, c'est l'objet Application dans l'appel Application.GetOpenFilename

    En VBA, justement tout cela est déjà codé dans le projet (grâce à Visual Basic - de grandes chances que @charente l'utilise).
    En C, il faut coder tout de zéro avec la Win32/ WinAPI. En C++, c'est compliqué parce que MFC/ ATL, ce sont toutes des surcouches de la Win32/ WinAPI (et en plus avant la norme C++98). Même la bibliothèque VCL de Delphi c'est la même surcouche.
    Ensuite tu passes soit à C# soit à une bibliothèque non native (multiplateforme)

    Si @charente code en VBA c'est qu'il n'est pas vraiment développeur : donc apprendre les pointeurs, la programmation objet, ... et + encore c'est très très long.

  6. #6
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 784
    Par défaut
    Hello,

    J'ai déjà employé GetOpenFilename() dans un programme C, sans pour autant avoir initialisé l'api windows. Sous SDL (encore en v1, c'était il y a longtemps) et sous win7, ceci fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    int getExtractFilename(char *filename) {
    	int rc;
    	char curdir[MAX_PATH];
    	OPENFILENAME ofn;
     
    	GetCurrentDirectory(sizeof(curdir),curdir);
    	strcpy(filename,"BE*.csv");
    	memset(&ofn,0,sizeof(ofn));
    	ofn.hwndOwner=GetActiveWindow();
    	ofn.lStructSize=sizeof(ofn);
    	ofn.lpstrFilter="*.csv\0\0";
    	ofn.lpstrFile=filename;
    	ofn.nMaxFile=MAX_PATH;
    	ofn.lpstrFileTitle=NULL;
    	ofn.nMaxFileTitle=0;
    	ofn.lpstrInitialDir=NULL;
    	ofn.lpstrTitle="Choisissez le fichier contenant les nouveaux extraits";
    	ofn.Flags=OFN_EXPLORER;
    	ofn.Flags|=OFN_DONTADDTORECENT;
    	ofn.Flags|=OFN_FILEMUSTEXIST;
    	ofn.Flags|=OFN_PATHMUSTEXIST;
    	rc=GetOpenFileName(&ofn);
    	SetCurrentDirectory(curdir);
    	return(rc);
    }
    Mais je n'ai jamais été voir ce que sdl fait comme initialisation avant d'appeler mon main()

  7. #7
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 667
    Par défaut
    Bonjour,

    La fonction peut être utilisée dans une application console. Il y a juste la structure à renseigner au préalable, c'est tout.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. accés au repertoire windows refusé
    Par mandrake_of_mandregas dans le forum Windows 7
    Réponses: 1
    Dernier message: 14/09/2013, 04h58
  2. interdire acces aux repertoires windows
    Par niro75 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 04/11/2008, 09h58
  3. problème d'accèes à un repertoire via FTP chez mon hébergeur
    Par vbcasimir dans le forum Dépannage et Assistance
    Réponses: 3
    Dernier message: 03/10/2005, 13h56
  4. [débutant] avoir accès aux données de la base BCDI 3
    Par Valichou dans le forum Bases de données
    Réponses: 7
    Dernier message: 06/05/2004, 13h13
  5. acces à postgresql depuis windows
    Par webdoing dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 08/03/2004, 11h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo