[R] Chemin complet d'un fichier texte déjà ouvert

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Avatar du membre
A2Energie
Niveau 5
Niveau 5
Messages : 140
Enregistré le : ven. 15 nov. 2013 20:22
Status : Hors ligne

Re: [R] Chemin complet d'un fichier texte déjà ouvert

#21

Message par A2Energie »

Salut Tlem, :mrgreen: <== Oui oui j'ai le sourire maintenant !!

Bonne idée que tu as là.
Mais bon si on ouvre plusieurs fichiers textes ayant le même nom, (même si entre temps on a refermé le fichier texte en question) je pense que ca peut pointer sur le mauvais fichier. Car il garde l'historique de ce qu'on a ouvert.
(J'ai pas encore trop poussé ce problème)

Pour ma part, la solution de ZDS me convient, car les fichiers sont toujours ouvert en double clique. :P

J'ai tout de même fais un ptit script pour utiliser les Cléfs de registres, ca pourra toujours servir :
Ps : dsl pour la forme des variables de la fonction, j'ai fais ca rapidos, Mais ca marche impeccable.
If WinExists("[CLASS:Notepad]", "") Then
          $hTexte = WinGetHandle("[CLASS:Notepad]") ; Handle
          $tTexte = WinGetTitle($hTexte) ; Titre
          $pTexte = WinGetProcess($hTexte) ; Pid
          $lTexte = ProcessGetFullpath($hTexte) ; Lien
          Msgbox(0, "Le lien du fichier texte ouvert", $lTexte)
ElseIf WinExists("[CLASS:WordPadClass]", "") Then
          $hTexte = WinGetHandle("[CLASS:WordPadClass]") ; Handle
          $tTexte = WinGetTitle($hTexte) ; Titre
          $pTexte = WinGetProcess($hTexte) ; Pid
          $lTexte = ProcessGetFullpath($hTexte) ; Lien
          Msgbox(0, "Le lien du fichier texte ouvert", $lTexte)
ElseIf WinExists("[CLASS:Notepad++]", "") Then
          $hTexte = WinGetHandle("[CLASS:Notepad++]") ; Handle
          $tTexte = WinGetTitle($hTexte) ; Titre
          $pTexte = WinGetProcess($hTexte) ; Pid
          $lTexte = $tTexte ; Lien
          If StringRight($lTexte, 12) = " - Notepad++" Then $lTexte = StringTrimRight($lTexte, 12)
          If StringLeft($lTexte, 1) = "*" Then $lTexte = StringTrimLeft($lTexte, 1)
          Msgbox(0, "Le lien du fichier texte ouvert", $lTexte)
EndIf

Func ProcessGetFullpath($Hwnd)
; -------------------------------------------
; - Description :
;     Permet de retourner le line du fichier texte ouvert
; - Variables :
;     $Hwnd= Handle du fichier texte
; - Retourne :
;     Lien du fichier texte ouvert
; -------------------------------------------
   $FTrouveLienTemp1 = ""
   $FTrouveLienTemp2 = ""
   $FTrouveLien_Process = WinGetProcess($Hwnd)
   $FTrouveLien_Titre = WinGetTitle($Hwnd)
   If StringRight($FTrouveLien_Titre, 13) = " - Bloc-notes" Then $FTrouveLien_Titre = StringTrimRight($FTrouveLien_Titre, 13)

   Local $aProc = DllCall('kernel32.dll', 'hwnd', 'OpenProcess', 'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $FTrouveLien_Process)
   Local $vStruct = DllStructCreate('int[1024]')
   DllCall('psapi.dll', 'int', 'EnumProcessModules', 'hwnd', $aProc[0], 'ptr', DllStructGetPtr($vStruct), 'int', DllStructGetSize($vStruct), 'int_ptr', 0)
   Local $aReturn = DllCall('psapi.dll', 'int', 'GetModuleFileNameEx', 'hwnd', $aProc[0], 'int', DllStructGetData($vStruct, 1), 'str', '', 'int', 2048)
   $aReturn = $aReturn[3]
   $i = 0
   While 1
     $i += 1
     $ii = 0
     $FTrouveLienTemp1 = RegEnumKey("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search\RecentApps", $i)
     If @error <> 0 Then Return ""
     If RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search\RecentApps\" & $FTrouveLienTemp1, "AppPath") = $aReturn Then
       While 1
         $ii += 1
         $FTrouveLienTemp2 = RegEnumKey("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search\RecentApps\" & $FTrouveLienTemp1 & "\RecentItems", $ii)
         If @error <> 0 Then Return ""
         If RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search\RecentApps\" & $FTrouveLienTemp1 & "\RecentItems\" & $FTrouveLienTemp2, "DisplayName") = $FTrouveLien_Titre Then
            Return RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search\RecentApps\" & $FTrouveLienTemp1 & "\RecentItems\" & $FTrouveLienTemp2, "Path")
         EndIf
       WEnd
     EndIf
   Wend
   Return ""
Endfunc
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Chemin complet d'un fichier texte déjà ouvert

#22

Message par Tlem »

Mais bon si on ouvre plusieurs fichiers textes ayant le même nom
Ils peuvent avoir le même nom, mais pas le même chemin. ^^
Après, cette méthode vous permet aussi de manière "automatique" de vérifier pour l'application "Notepad" quels ont été les fichiers ouvert ainsi que la date et l'heure. Du coup, vous pourriez automatiser la sauvegarde périodique en faisant la détection de l'ouverture/fermeture du NotePad ou toutes les X minutes ou comme vous avez la date et l'heure (LastAccessedTime) il suffit de comparer. ^^
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
A2Energie
Niveau 5
Niveau 5
Messages : 140
Enregistré le : ven. 15 nov. 2013 20:22
Status : Hors ligne

Re: [R] Chemin complet d'un fichier texte déjà ouvert

#23

Message par A2Energie »

Salut,

Ah ouai bienvu Tlem. :idea:
Je n'avais pas remarqué cette information. :?

La cléf est la suivante : LastAccessedTime :wink:

@++
Répondre