Bonjour,
La solution ne serait-elle pas de récupérer le programme associé à la lecture des PDF (avec la fonction FindExecutableA) ?
Bonjour,
La solution ne serait-elle pas de récupérer le programme associé à la lecture des PDF (avec la fonction FindExecutableA) ?
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é :
J'espère que ceci te fera avancer dans ton projet ...
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![]()
Bonjour,
Je retiens l'idéeavec 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"
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
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 ...
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
Oui effectivement, sur mon PC ou je réalise les essais j'ai encore l'ancien dossier Acrobat d'installer, merci pour votre analyse.
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager