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

Messages postés
11
Date d'inscription
samedi 17 décembre 2011
Dernière intervention
24 décembre 2011
- - Dernière réponse : cs_Tigrou66
Messages postés
11
Date d'inscription
samedi 17 décembre 2011
Dernière intervention
24 décembre 2011
- 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

Meilleure réponse
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
3
Merci
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)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 95 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Jack
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 95 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 95 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
3
Merci
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")

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 95 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Utilisateur anonyme
3
Merci
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")

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 95 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Utilisateur anonyme
Messages postés
11
Date d'inscription
samedi 17 décembre 2011
Dernière intervention
24 décembre 2011
0
Merci
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
Messages postés
11
Date d'inscription
samedi 17 décembre 2011
Dernière intervention
24 décembre 2011
0
Merci
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
Messages postés
11
Date d'inscription
samedi 17 décembre 2011
Dernière intervention
24 décembre 2011
0
Merci
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
0
Merci
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
Messages postés
11
Date d'inscription
samedi 17 décembre 2011
Dernière intervention
24 décembre 2011
0
Merci
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
0
Merci
Ok bonne programmation
Commenter la réponse de Utilisateur anonyme
Messages postés
11
Date d'inscription
samedi 17 décembre 2011
Dernière intervention
24 décembre 2011
0
Merci
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.