Chris,
voici un code que je viens d'écrire pour extraire uniquement les noms de commandes des librairies "standart" de PB (pas celles du dossier Window ni les lib utilisateur)
Dans le résultat, certaines librairies n'ont pas de commandes (?) et en regardant le fichier, tout semble crypté.
Les noms qui se terminent avec un numéro indiquent que ces commandes ont des paramètres optionnels; le nom de commande PB interne avec ce numéro existe bien.
J'ai essayé de comprendre comment le header est fait, j'ai saisi je crois (

) le principe par contre je n'arrive pas à saisir la délimitation des champs, c'est différent en fonction des fichiers.
Donc je ne suis pas certain que toutes les commandes y soient....
Code : Tout sélectionner
Global CheminPB$
NewList ListeLibWindows.string()
NewList ListeLibStandart.string()
;//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
Procedure.s CheminPureBasic()
Buffer$ = Space(260) : BufferSize = 259
If GetVersion_() & $FF0000 ; Windows NT/XP
clef = #HKEY_CLASSES_ROOT
Adresse = @"Applications\PureBasic.exe\shell\open\command"
Else ; La même chose pour Win9x
clef = #HKEY_LOCAL_MACHINE
Adresse = @"Software\Classes\PureBasic.exe\shell\open\command"
EndIf
If RegOpenKeyEx_(clef, Adresse, 0, #KEY_ALL_ACCESS, @Key) = #ERROR_SUCCESS
If RegQueryValueEx_(Key, "", 0, @type, @Buffer$, @BufferSize) = #ERROR_SUCCESS
OutputDirectory$ = GetPathPart(Mid(Buffer$, 2, Len(Buffer$) - 7))
EndIf
RegCloseKey_(Key)
EndIf
ProcedureReturn OutputDirectory$
EndProcedure
;//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
Procedure ListFichiersLibWindows()
;stocke Tous les noms de fichiers du repertoire Windows des librairies
Retour = #false
If ExamineDirectory(0, CheminPB$+"PureLibraries\Windows\", "*.*")
ProchainDir = NextDirectoryEntry()
While ProchainDir <> 0
If Nom_de_fichier$ <> "." And Nom_de_fichier$ <> ".." And ProchainDir = 1
Nom_de_fichier$ = DirectoryEntryName()
If Len(GetExtensionPart(CheminPB$+"PureLibraries\Windows\"+ Nom_de_fichier$)) = 0
; on ne prend en compte que les fichiers sans extension, on ne sait jamais
AddElement(ListeLibWindows())
ListeLibWindows()\s = Nom_de_fichier$
Fichier +1
EndIf
EndIf
ProchainDir = NextDirectoryEntry()
Wend
Retour = #true
Else
Retour = -1 ; impossible d'examiner
EndIf
ProcedureReturn Retour
EndProcedure
;//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
Procedure ListFichiersLibStandart()
;stocke Tous les noms de fichiers du repertoire des librairies sauf window et sauf userLib
Retour = #false
If ExamineDirectory(0, CheminPB$+"PureLibraries\", "*.*")
ProchainDir = NextDirectoryEntry()
While ProchainDir <> 0
If ProchainDir = 1
Nom_de_fichier$ = DirectoryEntryName()
If Len(GetExtensionPart(CheminPB$+"PureLibraries\"+ Nom_de_fichier$)) = 0
; on ne prend en compte que les fichiers sans extension, on ne sait jamais
AddElement(ListeLibStandart())
ListeLibStandart()\s = Nom_de_fichier$
Fichier +1
EndIf
EndIf
ProchainDir = NextDirectoryEntry()
Wend
Retour = #true
Else
Retour = -1 ; impossible d'examiner
EndIf
ProcedureReturn Retour
EndProcedure
;//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
Procedure IsStringWindowsFile(File$)
; retourne #true si les noms correspondent, sinon #false
PositionDansLaListe = ListIndex(ListeLibWindows())
ForEach ListeLibWindows()
If UCase(File$) = UCase(ListeLibWindows()\s)
Retour = #true
Break
EndIf
Next
SelectElement(ListeLibWindows(), PositionDansLaListe)
ProcedureReturn Retour
EndProcedure
;//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
Procedure IsStringStandartFile(File1$)
; retourne #true si les noms correspondent, sinon #false
PositionDansLaListe = ListIndex(ListeLibStandart())
ForEach ListeLibStandart()
If UCase(File1$) = UCase(ListeLibStandart()\s)
Retour = #true
Break
EndIf
Next
SelectElement(ListeLibStandart(), PositionDansLaListe)
ProcedureReturn Retour
EndProcedure
;//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
Procedure LectureFichier(FichierCourant$)
If ReadFile(0, CheminPB$ + "PureLibraries\"+FichierCourant$)
While Eof(0) = 0
a$ = Trim(ReadString())
If Left(a$, 4) = "ERUP"
ERUP + 1
If ERUP > 1
Break
EndIf
ElseIf Left(a$, 4) = "LIB3"
; on passe le mot
Else
; If a$ <> "" And Len(a$) > 1
If Len(a$) > 1
Char = PeekB( @A$)
If (Char >= 'a' And Char <= 'z') Or (Char >= 'A' And Char <= 'Z')
; on teste si c'est le nom d'un fichier lib Window et aussi un nom de fichier lib standart
; si oui, on ne prend pas en compte
If IsStringWindowsFile(a$) = #false And IsStringStandartFile(a$) = #false
Debug " "+a$
EndIf
EndIf
EndIf
EndIf
Wend
Else
MessageRequester("", "Impossible ouvrir fichier", 16)
EndIf
EndProcedure
;//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
; -- Prog principal
CheminPB$ = CheminPureBasic()
If ListFichiersLibWindows() And ListFichiersLibStandart()
; on lit toutes les libs standart et on extrait
Debug CountList(ListeLibStandart())
ForEach ListeLibStandart()
Debug "Fichier librairie --> "+ListeLibStandart()\s
LectureFichier(ListeLibStandart()\s)
Debug "- - - - "
Debug ""
Debug ""
Next
EndIf
End