
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.

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
$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