Faire ouvrir des pdf incorporés en resources par le lecteur de l'os [Résolu]

cs_Tigrou66 11 Messages postés samedi 17 décembre 2011Date d'inscription 24 décembre 2011 Dernière intervention - 18 déc. 2011 à 15:51 - Dernière réponse : cs_Tigrou66 11 Messages postés samedi 17 décembre 2011Date d'inscription 24 décembre 2011 Dernière intervention
- 21 déc. 2011 à 12:03
Bonjour ,

avant tout j'espère dans la être bonne section ou tout au moins pas trop loin (je code en vb 2008 express) ; mon problème est le suivant :

j'ai réalisé des fichiers d'aide en pdf (à cause de formules mathématiques) que je voudrais incorporer à l'exe pour que celui ci puisse les faire ouvrir par l’application par défaut de l'OS (voire éventuellement par le navigateur par défaut puisque qu'il y a un plugin pdf).

Je dois donc ajouter mon pdf aux ressources ; ça pas de problème ; ensuite je dois faire lancer le processus/application par défaut des pdf tout en lui passant le pdf en question.

C'est là que ça coince ; je ne sais pas trop comment on désigne ce fichier vu comme élément des ressources (il ne s'agit pas d'une ouverture par l'exe lui même) et au dit processus .

Cordialement.
Afficher la suite 

Votre réponse

12 réponses

cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 18 déc. 2011 à 18:02
+3
Utile
Salut

"je code en vb 2008 express"
C'est donc du VB.Net, pas VB6.

Il y a ShellExecute, une API de l'OS, à qui tu fournis le nom du fichier (PDF) et qui se débrouille à trouver et lancer l'application par défaut qui s'y rapporte.
Un exemple <dans cette source>

Mais je pense qu'en .Net, il doit y avoir quelque chose de plus propre dans la famille Process.
Désolé, je ne suis pas encore au point côté .Net

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Jack
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 18 déc. 2011 à 18:08
+3
Utile
Bonjour, jack,

C'est Process.Start (capable d'ouvrir à l'aide du programme associé par défaut à l'extension)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 18 déc. 2011 à 18:25
+3
Utile
Il y a aussi la méthode signalée dans
cette discussion


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
Utilisateur anonyme - 18 déc. 2011 à 19:30
+3
Utile
Bonsoir,

Pour ouvrir un fichier placé dans les ressources, tu dois commencer par l'extraire, puis dans ton cas l'écrire pour pouvoir l'ouvrir dans une application externe à ton programme.

En admettant que ta ressource se nomme monpdf, tu peux écrire :
Using monstream As New IO.MemoryStream(My.Resources.monpdf)
    monstream.WriteTo(New IO.FileStream("monpdf.pdf", IO.FileMode.OpenOrCreate))
End Using
Process.Start("monpdf.pdf")
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Utilisateur anonyme
Utilisateur anonyme - 18 déc. 2011 à 21:38
+3
Utile
Bonsoir,

Il te faut imbriquer alors 2 blocs Using / End using

Using monstream As New IO.MemoryStream(My.Resources.monpdf)
    using monfichier as new IO.FileStream("monpdf.pdf", IO.FileMode.OpenOrCreate)
       monstream.WriteTo(monfichier)
    end using
End Using
Process.Start("monpdf.pdf")
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Utilisateur anonyme
cs_Tigrou66 11 Messages postés samedi 17 décembre 2011Date d'inscription 24 décembre 2011 Dernière intervention - 18 déc. 2011 à 21:27
0
Utile
Merci à tous je vais me débrouiller avec tout ça !

@banana32 : ça marche jusque l'ouverture : le pdf est bien créé dans le dossier de lancement de l'application mais foxit reader signale une violation de partage.Idem en remplaçant OpenOrCreate par Create seul.Mais je me rapproche de la solution !
Commenter la réponse de cs_Tigrou66
cs_Tigrou66 11 Messages postés samedi 17 décembre 2011Date d'inscription 24 décembre 2011 Dernière intervention - 19 déc. 2011 à 09:19
0
Utile
Ca marche impeccable : le fichier est créé et s'ouvre bien dans le lecteur par défaut et pas de signalement d'écrasement s'il existe déjà.

seul petit bémol : si le fichier est resté ouvert dans l'appli pdf alors une nouvelle demande signale qu'un processus travaille déjà dessus.

(Je vais essayer d'y remédier tout seul cette fois).

Merci encore.
Commenter la réponse de cs_Tigrou66
cs_Tigrou66 11 Messages postés samedi 17 décembre 2011Date d'inscription 24 décembre 2011 Dernière intervention - 19 déc. 2011 à 15:09
0
Utile
Finalement j'ai mis ceci :

Using monstream As New IO.MemoryStream(My.Resources.monpdf)
    using monfichier as new IO.FileStream("monpdf.pdf", IO.FileMode.OpenOrCreate)
       monstream.WriteTo(monfichier)
    end using
End Using


... dans le "form load"

et ceci

Process.Start("monpdf.pdf")


dans le code associé au bouton déclencheur de l'aide ; et plus de pb !
Commenter la réponse de cs_Tigrou66
Utilisateur anonyme - 19 déc. 2011 à 17:23
0
Utile
Oui mais un petit test de présence du fichier (ou plutôt d'absence) suffirait :
if not my.computer.filesystem.fileexists(...) then 

Ceci t'éviterais l'extraction et l'écriture longue et pénible pour ta machine. Et tu n'auras alors qu'à l'ouvrir (process.start) dans la partie Else de la condition.

Bonne prog.
Commenter la réponse de Utilisateur anonyme
cs_Tigrou66 11 Messages postés samedi 17 décembre 2011Date d'inscription 24 décembre 2011 Dernière intervention - 19 déc. 2011 à 18:21
0
Utile
Oui mais je pensais mettre ça aussi dans le form load pour que les fichiers soient créés au premier lancement puis seulement recréés s'il venaient à être effacés.Mais il faut penser au cas où ils seraient effacés alors que l'appli est encore active.Il faut donc faire le test à chaque demande de lecture des fichiers.
Commenter la réponse de cs_Tigrou66
Utilisateur anonyme - 19 déc. 2011 à 19:00
0
Utile
Ok bonne programmation
Commenter la réponse de Utilisateur anonyme
cs_Tigrou66 11 Messages postés samedi 17 décembre 2011Date d'inscription 24 décembre 2011 Dernière intervention - 21 déc. 2011 à 12:03
0
Utile
J'ai codé comme ceci :


Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
        If Not My.Computer.FileSystem.FileExists("Doc1.pdf") Then
            Using monstream As New IO.MemoryStream(My.Resources.Doc1)
                Using monfichier As New IO.FileStream("Doc1.pdf", IO.FileMode.Create)
                    monstream.WriteTo(monfichier)
                End Using
            End Using
        End If
        Process.Start("Doc1.pdf")



Il faut tout mettre dans le code du bouton mais le fichier ne sera quand même recréé que s'il a disparu , appli déjà ouverte ou non .Le problème des ouvertures multiples étant géré par le soft externe.
Commenter la réponse de cs_Tigrou66

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.