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

VB.NET Discussion :

Choix entre 2 versions Acrobat.exe et acroRd32.exe [Débutant]


Sujet :

VB.NET

  1. #21
    Membre éclairé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    octobre 2006
    Messages
    629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : octobre 2006
    Messages : 629
    Points : 896
    Points
    896
    Par défaut
    Bonjour,

    La solution ne serait-elle pas de récupérer le programme associé à la lecture des PDF (avec la fonction FindExecutableA) ?

  2. #22
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Enseignant retraité
    Inscrit en
    novembre 2013
    Messages
    1 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant retraité

    Informations forums :
    Inscription : novembre 2013
    Messages : 1 433
    Points : 2 593
    Points
    2 593
    Par défaut
    Bonjour,

    La proposition de mk4-Hurrican m'a donné une idée ...

    La méthode qu'il propose permet d'ouvrir un fichier avec "son" programme par défaut. Mais Process.Start le permet aussi sans devoir chercher des outils dans les dll.

    Process.Start(NomEtCheminDuFichierPDFAlire) ouvre le fichier désigné avec le reader par défaut, mais sans qu'il soit possible (à mon avis) d'imposer la page à ouvrir.
    Donc, Process.start trouve l'exécutable nécessaire, sans même qu'on le lui indique. Dés lors, je teste de lui imposer le nom de l'exécuable installé qui me convient, sans en donner le chemin : Process.start trouve cet exécutable.
    il n'est donc plus nécessaire de "fouiller" la registry pour connaître l'emplacement de l'EXE, Process.start le trouvera.
    Ceci m'amène à simplifier mes codes précédents et à seulement tenter d'ouvrir avec AcroDR32 et Acrobat, tout en imposant la page à montrer.

    Voici le code simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            Dim NomEtCheminFichierALire As String = "D:\Tmp\ProcessTest\ManualPracticoSQL.pdf"   ' par exemple
            Dim PageALire As Integer = 15   ' par exemple
            Dim MonArgument As String = "/A page=" & PageALire.ToString & " " & NomEtCheminFichierALire
     
            Try
                Process.Start("AcroRD32", MonArgument)
            Catch
                Try
                    Process.Start("Acrobat", MonArgument)
                Catch
                    '
                End Try
            End Try
    J'espère que ceci te fera avancer dans ton projet ...

  3. #23
    Membre du Club
    Homme Profil pro
    Technicien
    Inscrit en
    juillet 2020
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : juillet 2020
    Messages : 73
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Je retiens l'idée avec cette méthode plus besoin de savoir ou est installé Adobe Reader 32 ou 64bits.

    J'ai testé votre code, après une petite modification cela fonctionne pour moi, sinon j'ai cette erreur qui s'affiche 2 fois "car 2 Try"
    Nom : erreur.PNG
Affichages : 29
Taille : 5,6 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim MonArgument As String = "/A ""page=129=OpenActions"" /n ""C:\mon.pdf"""
                    Try
                        Process.Start("AcroRd32", MonArgument)
                    Catch
                        Try
                            Process.Start("Acrobat", MonArgument)
                        Catch
                            '
                        End Try
     
                    End Try

  4. #24
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Enseignant retraité
    Inscrit en
    novembre 2013
    Messages
    1 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant retraité

    Informations forums :
    Inscription : novembre 2013
    Messages : 1 433
    Points : 2 593
    Points
    2 593
    Par défaut
    Ton erreur vient sans doute que tu n'as pas changé le nom et le chemin du fichier à lire : dans mon code, la variable designe un fichier sur un we mes disques, dans un dossier donné. C'est forcément différent sur ton PC.
    Mais il ne devrait pas t'afficher 2 fois le message, c'est comme si le Try ne fonctionnait pas chez toi ...

    Après 14h, je testerai chez moi pour voir ce qui se passe si le fichier ne peut être trouvé.

    Je te dirai ...

  5. #25
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Enseignant retraité
    Inscrit en
    novembre 2013
    Messages
    1 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant retraité

    Informations forums :
    Inscription : novembre 2013
    Messages : 1 433
    Points : 2 593
    Points
    2 593
    Par défaut
    Ok, j'ai vu. il ne s'agit pas d'une erreur produite dans ton code (elle ne vient pas des Try), mais bien par Acrobat qui ne peut trouver le fichier à ouvrir (c'était visible dans ton message précédent, j'aurais du le voir ... ). Dans ton cas, C:\mon.pdf n'existe pas, ou pas à cet endroit, ou bien tu n'as le droit de lire à cet endroit.

    Mais comment peux-tu avoir ce message 2 fois ? C'est possible si AcroRD32 ET Acrobat sont tous deux installés. Le premier message vient de AcroRD32 et le deuxième survient de Acrobat après que tu aies quitté AcroRD32. Note que si les 2 readers sont installés, c'est toujours AcroRD32 qui travaillera (quand le fichier à lire est trouvé), sauf à inverser les 2 Process.Start.
    Mais l'erreur vient du fait que ni l'un ni l'autre ne trouve le fichier à lire.

    Je te suggère d'utiliser ma syntaxe pour constituer la variable MonArgument. Tu pourras toujours revenir à ta syntaxe quand ça fonctionnera ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            Dim NomEtCheminFichierALire As String = "D:\Tmp\UnFichierQuiExiste.pdf"   ' par exemple
            Dim PageALire As Integer = 15   ' par exemple
            Dim MonArgument As String = "/A page=" & PageALire.ToString & " " & NomEtCheminFichierALire

  6. #26
    Membre du Club
    Homme Profil pro
    Technicien
    Inscrit en
    juillet 2020
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : juillet 2020
    Messages : 73
    Points : 44
    Points
    44
    Par défaut
    Oui effectivement, sur mon PC ou je réalise les essais j'ai encore l'ancien dossier Acrobat d'installer, merci pour votre analyse.

  7. #27
    Membre éclairé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    octobre 2006
    Messages
    629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : octobre 2006
    Messages : 629
    Points : 896
    Points
    896
    Par défaut
    C'est pour cela qu'utiliser la fonction d'accès au registre qui permet de récupérer le programme associé aux fichiers PDF, me semble la meilleure solution.

    Il suffit d'utiliser quelque chose comme çà :
    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
    Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long
     
    ' Retourne l'application associé au fichier passé en argument.
    Public Function get_ProgrammeAssocie(Fichier As String, Chemin As String) As String
        Dim NomApp As String
        Dim RetCod As Long
     
        ' Initialisation du buffer de retour
        NomApp = Space$(250)
     
        ' Appel à la fonction
        RetCod = FindExecutable(Fichier, Chemin, NomApp)
     
        ' Nettoyage de la valeur de retour
        NomApp = Microsoft.VisualBasic.Left(NomApp, InStr(1, NomApp, vbNullChar) - 1)
     
        ' Retourne le résultat
        get_ProgrammeAssocie = NomApp
     
    End Function

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Choix entre Excel (VBA) et 1 appli exe (Qt)
    Par gui80 dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 16/03/2011, 11h03
  2. choix entre dbexpress et objet interbase
    Par hani dans le forum Bases de données
    Réponses: 5
    Dernier message: 18/11/2004, 23h09
  3. Conseille Choix entre MySQL et InterBase?
    Par Redhouane dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/09/2004, 11h42
  4. Réponses: 7
    Dernier message: 04/03/2004, 13h32
  5. choix entre macro et fonction
    Par remi77 dans le forum C
    Réponses: 4
    Dernier message: 22/10/2003, 14h26

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