Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupérer un fichier texte.

Process/Notepad

    2 juillet 2019 à 15:06:10

    Bonjour,

    Est-ce possible de retrouver le chemin d'un fichier ouvert (en l’occurrence un fichier texte ici) à partir du process notepad via la méthode GetProcesses?

    J'ai beau regarder tous les attributs d'un objet Process, aucun ne semble répondre à ce besoin.

    Cordialement

    • Partager sur Facebook
    • Partager sur Twitter
      2 juillet 2019 à 16:59:16

      Salut,

      C'est peut être possible mais à mon avis, si c'est le cas, ce n'est pas en utilisant simplement le classe Process. C'est un classe faite pour gérer des processus, pas notepad.

      Cela dit, tu ne dois pas être le premier à vouloir lister des fichiers ouvert par un processus, j'ai fais quelque recherche et ça pas a l'air trivial.

      Quelques pistes :

      https://social.msdn.microsoft.com/Forums/en-US/a5014c25-eaf0-41d2-9c8a-506aff38748e/how-can-i-tell-who-has-a-file-open?forum=Vsexpressvcs

      https://stackoverflow.com/questions/177146/how-do-i-get-the-list-of-open-file-handles-by-process-in-c

      Sinon, quel est ton besoin réel ? Autre que récupérer un fichier déjà ouvert par notepad ? C'est pour faire quoi au final ?

      • Partager sur Facebook
      • Partager sur Twitter
        2 juillet 2019 à 17:33:08

        >Sinon, quel est ton besoin réel ?

        Je plussoie.

        Sinon, pour un processus aussi basique que NotePad et si le fichier est fourni au moment du lancement du processus, il est visible dans la "propriété" via WMI :

        https://stackoverflow.com/questions/2633628/can-i-get-command-line-arguments-of-other-processes-from-net-c

        • Partager sur Facebook
        • Partager sur Twitter
        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
          4 juillet 2019 à 9:27:03

          Tu peux tricher en récupérant le texte affiché dans la barre de titre de l’application. Par contre tu vas devoir utiliser l’Api Windows :
          1-Tu fais un FindWindow pour récupérer ton notepad.
          2-Tu récupère le texte via GetWindowText sur la handle de la fenêtre récupérée en étape un.
          C’est bidouille, mais ça fait le job.
          • Partager sur Facebook
          • Partager sur Twitter
            4 juillet 2019 à 11:52:19

            SuperCoincoin a écrit:

            Tu peux tricher en récupérant le texte affiché dans la barre de titre de l’application. Par contre tu vas devoir utiliser l’Api Windows :
            1-Tu fais un FindWindow pour récupérer ton notepad.
            2-Tu récupère le texte via GetWindowText sur la handle de la fenêtre récupérée en étape un.
            C’est bidouille, mais ça fait le job.

            Il récupèrera pas le chemin, juste le nom du fichier.
            • Partager sur Facebook
            • Partager sur Twitter
              5 juillet 2019 à 10:32:35

              My bad, j’utilise Notepad++ et il y a tout le chemin dans la barre de titre.

              • Partager sur Facebook
              • Partager sur Twitter
                5 juillet 2019 à 14:17:47

                SuperCoincoin a écrit:

                My bad, j’utilise Notepad++ et il y a tout le chemin dans la barre de titre.

                Effectivement. Ça peut être une solution d'utiliser Notepad++, je doute qu'ils changent ça de sitôt.

                D'ailleurs, pas besoin d'interop, on peut utiliser MainWindowTitle directement en C#.

                Problème étant qu'il récupère seulement la valeur à l'exécution. Valeur qui tend à changer lorsqu'on switch d'onglet.
                Et notepad++ n'a pas l'air d'utiliser de process enfant pour la gestion de ces onglets...

                • Partager sur Facebook
                • Partager sur Twitter
                  5 juillet 2019 à 18:51:11

                  je te propose se code fonctionnelle qui et une ebauche mes qui fait se que tu recherche

                  Imports System.IO
                  Imports System.Threading
                  Public Class Form1
                      Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
                          'cherche le processus botepad et recupere le titre
                          Dim p() As Process = Process.GetProcessesByName("notepad")
                          For Each proc As Process In p
                              'suprime du titre -bloc-notre
                              Dim A As String = (proc.MainWindowTitle)
                              A = A.Replace(" - Bloc-notes", "")
                              'affiche le titre dans le label1
                              Label1.Text = A
                          Next
                      End Sub
                  
                      Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
                          Dim thread As New Thread(AddressOf lance)
                          thread.Start()
                      End Sub
                      Private Sub lance()
                          For Each drive As IO.DriveInfo In IO.DriveInfo.GetDrives
                              If drive.IsReady Then
                                  Chercheextention(New IO.DirectoryInfo(drive.RootDirectory.ToString), {"txt"})
                              End If
                          Next
                          MsgBox("recherche terminer")
                      End Sub
                      Private Sub Chercheextention(dossier As IO.DirectoryInfo, Extensions() As String)
                          Try
                              'pour chaque extension...
                              For Each ext As String In Extensions
                                  '...on fait une liste des fichiers concernés...
                                  Dim f() As IO.FileInfo = dossier.GetFiles("*." & ext)
                                  '...et on ajoute les fichiers à la listbox
                                  For Each img As IO.FileInfo In f
                                      If Me.ListBox1.InvokeRequired Then
                                          ListBox1.Invoke(Sub() ListBox1.Items.Add(img.FullName))
                                      End If
                                  Next
                              Next
                              'recherche des sous-dossiers...
                              For Each d As IO.DirectoryInfo In dossier.GetDirectories
                                  'et recherche récursive des fichiers
                                  Chercheextention(d, Extensions)
                              Next
                          Catch ex As Exception
                  
                          End Try
                  
                      End Sub
                  
                      Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
                          'cherche dans le listbox le lien du contenu du label1 qui cherche
                          For i As Integer = 0 To ListBox1.Items.Count - 1
                              If (ListBox1.Items(i).ToString.Contains(Label1.Text)) Then
                                  MsgBox("TROUVER")
                                  'selectionne dans le listbox le lien qu il a trouver
                                  ListBox1.SetSelected(i, True)
                                  'recupere le lien qu il a selectionner dans le label2
                                  Label2.Text = ListBox1.SelectedItem.ToString
                              End If
                          Next
                      End Sub
                  End Class



                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 juillet 2019 à 20:36:32

                    Vraiment ? Looper sur tous les fichiers du système ? C'est pas la méthode la plus pertinente que j'ai jamais vu :D

                    En soit tu pourrais avec un software comme cheatengine essayé de voir si le chemin du fichier est à un endroit statique dans la mémoire du processus puis la lire avec une lib comme https://github.com/ekistece/MemoryEngine.cs/blob/master/MemoryEngine.cs

                    -
                    Edité par r00tKiller 6 juillet 2019 à 0:30:44

                    • Partager sur Facebook
                    • Partager sur Twitter
                      5 juillet 2019 à 22:12:52

                      r00tKiller a écrit:

                      Vraiment ? Looper sur tous les fichiers du système ? C'est la chose la plus stupide que j'ai jamais vu :D

                      Bah ! Calmons-nous. C'est toujours bien d'avoir des propositions, même mauvaises.

                      Aussi mauvais soit le code, il y a toujours quelqu'un derrière qui l'a écrit et ça me met mal à l'aise de balayer ça d'un revers de main...

                      r00tKiller a écrit:

                      En soit tu pourrais avec un software comme cheatengine essayé de voir si le chemin du fichier est à un endroit statique dans la mémoire du processus puis la lire avec une lib comme https://github.com/ekistece/MemoryEngine.cs/blob/master/MemoryEngine.cs

                      Hélas, Notepad ne garde pas de handle des fichiers. Il se contente de copier le contenu à l'ouverture.

                      Je pense qu'on arrivera pas à trouver de solution vraiment adéquate tant qu'on aura pas réponse à cette question :

                      earp91 a écrit:

                      Sinon, quel est ton besoin réel ? Autre que récupérer un fichier déjà ouvert par notepad ? C'est pour faire quoi au final ?

                      Si ça se trouve, c'est un fichier généré, avec une grosse valeur 'path' dans le registre et ça va tenir en 3 lignes.



                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 juillet 2019 à 0:36:37

                        Scuzy, c'est vrai que j'suis po cool.

                        En attendant, il y a quand même des traces du dossier du fichier ouvert :

                        Alors en combinant la lecture du titre de la fenêtre et l'exploitation de la mémoire, on peut peut-être sortir un truc ?

                        -
                        Edité par r00tKiller 6 juillet 2019 à 0:37:09

                        • Partager sur Facebook
                        • Partager sur Twitter
                          6 juillet 2019 à 1:25:54

                          Qui sait à quoi ces entrées correspondent ? Pas moi.

                          En tout cas, ça a l'air trop chiant pour que je me lance là dedans. :p

                          • Partager sur Facebook
                          • Partager sur Twitter
                            8 juillet 2019 à 9:40:17

                            Les adresses mémoires, avec les systèmes de sécurité des nouveaux OS, c'est de moins en moins pertinent.

                            Je reviens aussi sur la question essentielle, c'est quoi le vrai besoin.

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                              8 juillet 2019 à 10:25:45

                              On notera que l'auteur ne s'est pas reconnecté sur OC depuis le post initial ...
                              • Partager sur Facebook
                              • Partager sur Twitter
                                16 juillet 2019 à 16:39:26

                                Bonjour,

                                Oulala je n'étais tout simplement pas disponible.

                                J'ai pris l'exemple de notepad.exe et d'un fichier texte mais c'est en réalité un fichier Simulink que j'aimerai récupérer dès lors que le fichier est ouvert. Même si je pense que la méthodologie est la même.

                                Le but est de récupérer l'emplacement du fichier ouvert.

                                J'ai fait des recherches et j'ai trouvé un article qui se rapproche de ce but : https://www.codeproject.com/KB/shell/OpenedFileFinder.aspx?fid=422864&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=26&select=2277170

                                LilyKianii a écrit:

                                Je pense qu'on arrivera pas à trouver de solution vraiment adéquate tant qu'on aura pas réponse à cette question :

                                earp91 a écrit:

                                Sinon, quel est ton besoin réel ? Autre que récupérer un fichier déjà ouvert par notepad ? C'est pour faire quoi au final ?

                                Si ça se trouve, c'est un fichier généré, avec une grosse valeur 'path' dans le registre et ça va tenir en 3 lignes.

                                Si il suffit d'aller fouiller dans les registres et d'aller récupérer ce path alors oui je pense que cela suffirait.

                                Merci

                                PS : A partir de ce path je récupère le fichier et je "l'unzip".

                                -
                                Edité par DimitriNeker1 16 juillet 2019 à 16:50:13

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  17 juillet 2019 à 11:51:56

                                  DimitriNeker1 a écrit:

                                  J'ai pris l'exemple de notepad.exe et d'un fichier texte mais c'est en réalité un fichier Simulink que j'aimerai récupérer dès lors que le fichier est ouvert. Même si je pense que la méthodologie est la même.

                                  Pas forcément, ça peut faciliter la chose.

                                  DimitriNeker1 a écrit:

                                  J'ai fait des recherches et j'ai trouvé un article qui se rapproche de ce but : https://www.codeproject.com/KB/shell/OpenedFileFinder.aspx?fid=422864&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=26&select=2277170

                                  Tu parles de la fonction GetOpenedFiles ? De ce que je lis en diagonale, il te faut quand même un chemin pour orienter la recherche.

                                  DimitriNeker1 a écrit:

                                  Si il suffit d'aller fouiller dans les registres et d'aller récupérer ce path alors oui je pense que cela suffirait.

                                  Merci

                                  PS : A partir de ce path je récupère le fichier et je "l'unzip".

                                  C'est une affirmation ? Genre vous avez triomphé de votre problème ou c'est toujours WIP ?



                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    18 juillet 2019 à 15:44:55

                                    Bonjour,

                                    LilyKianii a écrit:

                                    Tu parles de la fonction GetOpenedFiles ? De ce que je lis en diagonale, il te faut quand même un chemin pour orienter la recherche.

                                    Je cherche justement ce chemin.



                                    il ne s'agit pas d'une affirmation mais de ma pensé. Je ne sais pas vraiment où chercher. C'est pourquoi je cherche la méthodologie (utilisation des processus? utilisation de la RAM&adressage).

                                    c'est toujours WIP.



                                    -
                                    Edité par DimitriNeker1 18 juillet 2019 à 15:46:08

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      14 août 2019 à 15:25:18

                                      Si vous avez des "pensées" et que vous cherchez des outils correspondant à vos "pensées", vous allez chercher longtemps, très longtemps.

                                      Comprenez comment ce que vous trouvez sur le net fonctionne, sinon, vous tournerez en rond, très longtemps.

                                      Ce que vous donnez en exemple est un truc extrêmement bas niveau, proche du "hardware", c'est de la programmation système spécifique à Windows, avec utilisation de module Kernel et tout le toutime.

                                      C'est fait pour des utilitaires comme indiqué dans l'article et l'étendre demande de très très bonnes connaissances en programmation système Windows.

                                      Votre besoin reste très très flou et je doute que vous aillez besoin de ce type de "grosse Bertha".

                                      Si le programme "Simulink" tourne toujours, il y a de très grande chance qui verrouille le fichier, vous interdisant de le lire donc de le zipper.

                                      Pouvez-vous prend un peu de temps pour exposer votre problème et arrêter avec des exemples "foireux" ?

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

                                      Récupérer un fichier texte.

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown