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

API, COM et SDKs Delphi Discussion :

Connaître le chemin du dossier qui sera ouvert par le composant TOpenDialog


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chef de projets
    Inscrit en
    Août 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 127
    Par défaut Connaître le chemin du dossier qui sera ouvert par le composant TOpenDialog
    Bonjour,

    J'utilise le composant "TOpenDialog" pour aller chercher des fichiers. Mon appli est installée sur de nombreux PC's et serveurs. Et de temps en temps cette instruction fige et ne redonne pas la main à l'utilisateur (attente > 10 minutes avant kill).
    Je pense que cela est dû à un chemin qui n'existe plus dans le système, puisque si on ne renseigne pas le "InitialDir" Windows détermine le dernier dossier auquel il a donné accès.

    Ma question est la suivante, auriez-vous une commande pour obtenir la chemin que Windows va mettre dans le "InitialDir" du TOpenDialog ? Ceci de me permettrait de tester l'existence du dossier avant.

    Ps : je ne souhaite pas gérer le "initialdir" à la main.

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par joc02 Voir le message
    Je pense que cela est dû à un chemin qui n'existe plus dans le système, puisque si on ne renseigne pas le "InitialDir" Windows détermine le dernier dossier auquel il a donné accès.
    Intéressant. Si quelqu'un pouvait confirmer et expliquer exactement comment cela fonctionne, je serais curieux de le savoir. Où est-il conservé, ce chemin du dernier dossier ouvert ?

    Par contre j'ai du mal à croire que ce soit la cause du plantage de l'application.

    P.-S. Je viens de faire le test de supprimer le dernier dossier ouvert et de relancer le dialogue d'ouverture de fichier : c'est le dossier "documents" qui s'ouvre.

  3. #3
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Dans le cas où le dernier dossier est un dossier partagé qui n'est plus accessible, il y a ce problème.
    Mais c'est un fonctionnement dû à Windows. Pour savoir si le dossier existe, il essaie d'abord de joindre la machine hébergeant le dossier, il rend la main une fois qu'il a un time-out.
    Je pense que le seul moyen est de préciser InitialDir.

    Le dernier dossier ouvert, je ne sais pas où il est sauvegardé.

  4. #4
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    J'ai consulté le lien proposé par Papy214 et essayé de comprendre un peu les choses. Quelle est la règle à suivre pour convertir en texte les données de ce genre ?

    Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRU]
    "MRUListEx"=hex:02,00,00,00,0d,00,00,00,0c,00,00,00,0b,00,00,00,08,00,00,00,07,\
    00,00,00,00,00,00,00,04,00,00,00,0a,00,00,00,09,00,00,00,03,00,00,00,06,00,\
    00,00,05,00,00,00,01,00,00,00,ff,ff,ff,ff
    "1"=hex:76,00,62,00,73,00,65,00,64,00,69,00,74,00,2e,00,65,00,78,00,65,00,00,\
    00,14,00,1f,50,e0,4f,d0,20,ea,3a,69,10,a2,d8,08,00,2b,30,30,9d,19,00,2f,45,\
    3a,5c,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Pardon de poster un code un peu m***, mais c'est pour essayer de comprendre.

    La chaîne de départ a été obtenue au moyen de la commande suivante :

    Code BATCH : Sélectionner tout - Visualiser dans une fenêtre à part
    reg query HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedPidlMRU

    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
    program HexToText;
     
    {$APPTYPE CONSOLE}
     
    uses
      SysUtils, Windows;
     
    const
      SAMPLE = '76006200730065006400690074002E00650078006500000014001F50E04FD020EA3A6910A2D808002B30309D19002F453A5C000000000000000000000000000000000000000000';
     
    var
      i: integer;
      b: byte;
      s: string;
     
    begin
      s := '';
      for i := 1 to Length(SAMPLE) div 2 do
      begin
        b := StrToInt('$' + Copy(SAMPLE, 2 * i - 1, 2));
        if b <> 0 then
          s := s + Chr(b);
      end;
      MessageBox(0, pansichar(s), '', 0);
    end.
    J'obtiens une chaîne en partie lisible, contenant le nom d'une application ("vbsedit.exe"), un chemin ("E:\") et entre les deux des hiéroglyphes.

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

Discussions similaires

  1. probleme pour recuperer le chemin du dossier courant
    Par HoB dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 11/08/2007, 11h22
  2. recuperer le chemin du dossier selectionné ds un JFileChoose
    Par dimitrimm972 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 08/04/2006, 15h57
  3. Le dossier qui stock les mots de passe
    Par cartonis dans le forum Sécurité
    Réponses: 21
    Dernier message: 17/08/2005, 12h49
  4. Qui sera le client ? Serveur ?
    Par nesquik dans le forum Web & réseau
    Réponses: 8
    Dernier message: 07/07/2005, 13h33
  5. Réponses: 2
    Dernier message: 05/06/2004, 11h56

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