VB 2010: Gérer les "ouvrir avec"

Résolu/Fermé
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 - 25 juil. 2014 à 19:57
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 29 juil. 2014 à 18:13
Bonjour,

Je développe une application vb 2010.
Mon programme comporte une textbox.
Je voudrais que, lorsque l'on clique droit sur un fichier, ouvrir avec et que l'on choisisse mon executable, l'appli lise le fichier et l'affiche dans la textbox.
Pour le moment, cette opération ouvre juste mon application, mais aucun texte dans la textbox

Merci de votre aide.
A voir également:

12 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
28 juil. 2014 à 16:55
Bonjour,

Je te conseillerais de mettre une action dans le menu contextuel des fichiers texte qui ouvrirait ton appli avec l'affichage du fichier texte.
Pour ce faire dans les 2 cas, il faut que tu récupères le chemin de ton fichier texte pour pouvoir l'afficher dans une TextBox ou une RichTexBox au choix suivant l'importance du fichier.
0
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 15
Modifié par Anonyme209 le 28/07/2014 à 20:07
Bonjour, merci de ta réponse.

Je voudrais cependant que cela se fasse avec tous les types de fichiers, pas seulement avec les fichiers textes. Pour ce qui est de modifier le menu contextuel, je vais faire plus de recherches de mon côté.
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
28 juil. 2014 à 20:43
Le fait de mettre le menu contextuel sur tous les fichiers n'est pas un problème. Le problème se situe de l'ouverture de ces fichiers qui est différente pour chaque extension. Pour le menu contextuel tu peux voir la marche à suivre dans différents de mes programmes. Par exemple un de mes derniers : "Visionneuse image" qui lui met un menu contextuel pour les dossier images.
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
28 juil. 2014 à 20:44
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
29 juil. 2014 à 11:22
J'avais dans mes archives un petit utilitaire, je viens de déposer la source. Je pense que cela sera plus facile de comprendre avec ce programme:

https://codes-sources.commentcamarche.net/source/100677-afficher-par-clic-droit-le-chemin-d-un-fichier-ou-d-un-dossier
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 15
29 juil. 2014 à 12:26
Bonjour, le code de mon programme pour le bouton ouvrir est

Try
RichTextBox1.Rtf = fichier
Catch ex As Exception
RichTextBox1.Text = fichier
End Try


Je voudrais que mon programme s'ouvre et exécute le même code dès l'ouverture (en remplaçant fichier par l'adresse du fichier) - sans que l'on n'appuie sur le bouton ouvrir - lorsque l'on choisit d'ouvrir un fichier avec mon programme.

Merci de votre aide et désolé si je n'avais pas bien exposé mon problème.
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
29 juil. 2014 à 13:45
Ouvrir un nouveau projet nommé: Lire_texte (c'est important pour la suite)
mettre dans le Form une RichTextBox et un Button avec ce code:


Option Strict On
Imports System.IO
Imports System.Text
Imports Microsoft.Win32
Public Class Form1
    Dim cheminsource As String 'chemin du fichier texte
    Dim Key As RegistryKey
    Dim cle_txt As String 'clé associée à l'extension .txt
   Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Button1.Text = "Créer menu contextuel"
        Verificationcletxt() 'Verifier si la clé Ouvrir Fichier texte existe
        'ouverture par clic droit
        'recuperer le chemin du fichier texte
        For Each s As String In My.Application.CommandLineArgs
            cheminsource = s 'chemin du fichier texte
        Next s
        If cheminsource = "" Then
            Exit Sub
        Else
            liretexte(cheminsource) 'ouvrir le fichier texte dans une RichTextBox
        End If
    End Sub
    'Verifier si la clé Ouvrir Fichier texte existe
    Private Sub Verificationcletxt()
        cle_txt = rechercher_cle(".txt") 'chemin de la clé Ouvrir Fichier texte
        Dim test As Microsoft.Win32.RegistryKey = My.Computer.Registry.ClassesRoot.OpenSubKey(cle_txt & "\shell\Ouvrir Fichier texte\command", False)
        If test Is Nothing Then
            Button1.Text = "Créer menu contextuel"
        Else
            Button1.Text = "Supprimer menu contextuel"
        End If
    End Sub
    'création et suppression du menu contextuel Ouvrir Fichier texte
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        cle_txt = rechercher_cle(".txt") 'chemin clé
        If Not IsAdmin() Then
            MessageBox.Show("La modification du menu contextuel de l'explorateur ne se fera pas car vous n'avez pas les " & _
                 "droits d'aministrateur." & Environment.NewLine & "Pour modifier cette option, vous devez fermer ce programme " & _
                " et le relancer en tant qu'administrateur.", "Droits d'aministrateur", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Else
            If Button1.Text = "Créer menu contextuel" Then
                'On crée la clé Ouvrir Fichier texte
                Key = Registry.ClassesRoot.CreateSubKey(cle_txt & "\shell\Ouvrir Fichier texte\command") 'adapter le nom du menu contextuel
                Registry.SetValue("HKEY_CLASSES_ROOT\" & cle_txt & "\shell\Ouvrir Fichier texte\command", "", My.Application.Info.DirectoryPath & "\" & "Lire_texte.exe " & """%1""") 'adapter le nom de l'appli
                MessageBox.Show("Votre clé est créée", "Création clé registre", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Button1.Text = "Supprimer menu contextuel"
            Else
                Button1.Text = "Supprimer menu contextuel"
                'On supprime la clé Ouvrir Fichier texte
                Key = Registry.ClassesRoot.OpenSubKey(cle_txt & "\shell", True)
                Key.DeleteSubKeyTree("Ouvrir Fichier texte") 'adapter le nom du menu contextuel
                MessageBox.Show("Votre clé est supprimée", "Suppression clé registre", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Button1.Text = "Créer menu contextuel"
            End If
        End If
    End Sub
    'affiche le fichier texte dans une RichTextBox
    Private Sub liretexte(ByVal chemin As String)
        Dim fileReader As String
        fileReader = My.Computer.FileSystem.ReadAllText(chemin, Encoding.Default)
        RichTextBox1.Text = fileReader
    End Sub
    Private Function IsAdmin() As Boolean
        Return My.User.IsInRole(Microsoft.VisualBasic.ApplicationServices.BuiltInRole.Administrator)
    End Function
    'on recherche la clé associée à l'extension
    Public Function rechercher_cle(ByVal extension As String) As String
        ' va chercher la sous-clé correspondante 
        Key = Registry.ClassesRoot.OpenSubKey(extension)
        extension = CStr(Key.GetValue(""))
        Return extension
    End Function
End Class


Il faut que tu comprennes qu'en faisant un menu contextuel, c'est pour récupérer le chemin du fichier. A partir de là tu peux utiliser ce chemin pour faire ce que tu veux.

Bonne programmation
0
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 15
Modifié par Anonyme209 le 29/07/2014 à 15:09
Bonjour,

Je tiens à préciser même après avoir supprimer la clé, la richtextbox est automatiquement remplie du texte du fichier ouvert.
Je ne sais pas si c'est normal, mais ça marche avec tous les fichiers, pas seulement avec les fichiers texte.

Sinon, comment faire pour que ce code marche dans mon application de départ, en sachant que mon application est portable (sans installation) et que l'exécutable peut donc bouger?
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
29 juil. 2014 à 16:00
Je voudrais que, lorsque l'on clique droit sur un fichier, ouvrir avec et que l'on choisisse mon executable, l'appli lise le fichier et l'affiche dans la textbox.

Si tu ouvres ton application comme tu voulais le faire au départ, tu n'as que ce code à mettre:


Option Strict On
Imports System.IO
Imports System.Text
Public Class Form1
    Dim cheminsource As String 'chemin du fichier texte
      Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
               'recuperer le chemin du fichier texte
        For Each s As String In My.Application.CommandLineArgs
            cheminsource = s 'chemin du fichier texte
        Next s
        If cheminsource = "" Then
            Exit Sub
        Else
            liretexte(cheminsource) 'ouvrir le fichier texte dans une RichTextBox
        End If
    End Sub
 'affiche le fichier texte dans une RichTextBox
    Private Sub liretexte(ByVal chemin As String)
        Dim fileReader As String
        fileReader = My.Computer.FileSystem.ReadAllText(chemin, Encoding.Default)
        RichTextBox1.Text = fileReader
    End Sub


Je tiens à préciser même après avoir supprimer la clé, la richtextbox est automatiquement remplie du texte du fichier ouvert.
Je ne sais pas si c'est normal, mais ça marche avec tous les fichiers, pas seulement avec les fichiers texte.


C'est normal. Je ne sais pas si tu as compris que l'action ce fait à l'ouverture de ton appli:

   Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load


Le menu contextuel c'est une facilité. Car avec ton clic droit pour choisir ton exécutable , tu obliges l'utilisateur à aller le chercher, mais c'est ton choix.

J'espère que cela est plus clair pour toi. Il y a tous les commentaires pour la compréhension.

0
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 15
Modifié par Anonyme209 le 29/07/2014 à 16:09
Bonjour,

Merci beaucoup, ça marche.

Je met le sujet en résolu.

PS: est-ce obligé de mettre l'option strict à ON? Ça me crée des erreurs au niveau de mes msgbox.
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
29 juil. 2014 à 17:20
l' Option Strict On te souligne toutes tes erreurs pour les corriger. Avant VB.NET on mettait :

MsgBox ("Bonjour")

Maintenant il faut mettre:

le corps du message: Bonjour
le titre du message: Salutation
L'icone à afficher: Information

Derrière MessageBoxIcon tu mets un point, tu va avoir un menu contextuel qui va s'afficher avec toutes les icones que tu peux mettre.
Ceci est valable pour tous ce qui a un point c'est très parique, il faut l'utiliser.

 MessageBox.Show("Bonjour", "Salutations", MessageBoxButtons.OK, MessageBoxIcon.Information)
            


Apprends à mettre tes MsgBox comme ceci. sauf quand tu veux faire des test bien entendu!

Bonne programmation
0
Anonyme209 Messages postés 678 Date d'inscription samedi 6 octobre 2012 Statut Membre Dernière intervention 22 décembre 2020 15
29 juil. 2014 à 17:34
Bonjour,

Personellement je préfère utiliser
MsgBox("message", MsgBoxStyle.Information + vbOkOnly, "titre")

que
MessageBox.Show("Bonjour", "Salutations", MessageBoxButtons.OK, MessageBoxIcon.Information)


Sinon, l'erreur était que l'option strict on obligeait à remplacer
MsgBoxStyle.Information + vbOkOnly

par
CType(MsgBoxStyle.Information + vbOkOnly, MsgBoxSyle)


Embêtant mais facile à régler.
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
29 juil. 2014 à 18:13
Mais ce n'est pas ce que tu préfères. C'est la manière de coder en VB.NET. Après bien sur tu fais ce que tu veux, mais généralement quand on fait un travail on essaie d'appliquer les règles.
Mais si tu ne veux pas être embêté tu mets:
Option Strict Off

parce que si un programmeur a réglé son VisualStudio 2010 automatiquement à l'ouverture en Option Strict On (c'est mon cas) , je ne t'explique pas les erreurs qu'il va trouvé.

Et pour les déclarations des variable numériques tel que:
Integer, Decimal, Double, Long etc., cela te corrige tes erreurs.

T'apprécies à l'usage. C'est juste une discipline a avoir comme dans beaucoup de domaine
0