C'est loin d'être parfait, si on a plusieurs API sur la même ligne, on affiche la ligne entière, ça me permet de contrôler le résultats des API imbriquées et de corriger si nécessaire.
Avec cette liste d'API, je peux retrouver l'OS minimum ainsi que la version de IE ou autre composant Windows nécessaire à l'exécution de mon projet (il faut se farcir chaque API sur le site MS (SDK)).
Les limites sont au niveau des API comme sendmessage (dépendant du type de message), par exemple les messages de Listicon LVM_xx ne nécessitent pas tous le même OS.
Mettez votre directory pour vos fichiers dans la variable Directory$, sachant qu'il n'y a pas d'appels de sous-dossier, on analyse ceux de la directory.
Voilà par exemple le résultat d'un de mes fichiers (je ne met pas tout, c'est trop long).
Code : Tout sélectionner
; Fichier PureiconManager_Macros.pb
LockResource_()
SizeofResource_()
UpdateResource_()
EnumResourceNames_()
FindResourceEx_()
CreateFile_()
CreateFileMapping_()
CloseHandle_()
MapViewOfFile_()
CloseHandle_(hMapFile) : CloseHandle_(hFile)
VirtualQuery_()
UnmapViewOfFile_(*MapViewOfFile) : CloseHandle_(hMapFile) : CloseHandle_(hFile)
WriteFile_()
BeginUpdateResource_()
EndUpdateResource_()
Code : Tout sélectionner
;// Description
;// recherche toutes les API des fichiers d'un dossier
;// affiche le nom du fichier s'il contient des API
;// ainsi que le nom de ou des API qu'il contient
;// Limites :
;// Si une API est déjà dans la liste, elle n'apparaitra pas
;// si elle est dans un fichier qui suit.
;// Pour avoir les doublons, répondez oui au lancement
;// Si on répond oui, on aura toutes les API de chaque fichier
;// Fait par Denis le 14 Novembre 2009
Structure MyDeclare
NomProc.s
API_Name.s
EndStructure
EnableExplicit
Global NewList MyDeclarations.MyDeclare()
Global Directory$
Global Element_Courant.l
Global SourceFileName.s = ProgramParameter()
Global Chaine.s = ""
Global TempDir.s = GetTemporaryDirectory()
Global Tmpchaine.s = ""
Global RC.s = Chr(13) + Chr(10)
Global Position = -1, GarderDoublons.l
Directory$ = "K:\PureBasic\Projets\Editeur d icones\PureIconManager\PIM_1_0"
Procedure CheckString(Chaine.s)
Protected Doublon = #False
Protected Position.l, Nb_API.l, Nb_espaces.l, longueur.l, i.l
Protected Data01.s = Trim(Chaine)
Protected Data02.s = ""
;// on élimine les commentaires
Position = FindString(Data01, ";", 1)
If Position <> 0
Data01 = RTrim(Left(Data01, Position-1))
If Len(Data01) = 0
ProcedureReturn
EndIf
EndIf
;// recherche des API avec _(
;// si pas d'API trouvée, on retourne une chaine vide
Position = FindString(Data01, "_(", 1)
If Position = 0
Data01 = ""
ProcedureReturn
EndIf
;// on ne garde que l'API
;// on cherche combien d'API il y a dans la chaine
Nb_API = CountString(Data01, "_(")
Select Nb_API
Case 1
;// 1 seule, on isole jusqu'au nom
Data01 = Left(Data01, Position+1)
;// on isole que le nom de l'API en cherchant
;// le dernier espace de la chaine
Nb_espaces = CountString(Data01, " ")
For i = (Len(Data01)-2) To 1 Step-1
Select Asc(Mid(Data01, i, 1))
Case 'A' To 'Z', 'a' To 'z', '0' To '9', '_'
Data02 = Mid(Data01, i, 1) + Data02
Default
Break
EndSelect
Next
Data01 = Data02 + "_()"
Default
;// plusieurs API par ligne, on ne fait rien
EndSelect
If GarderDoublons = #False
ForEach MyDeclarations()
If MyDeclarations()\API_Name = Data01
;// on ne fait rien car doublon
Doublon = #True
Break
EndIf
Next
EndIf
If Doublon = #False
;// on ajoute à la liste chainée
If AddElement(MyDeclarations())
MyDeclarations()\API_Name = Data01
Else
MessageRequester("Erreur", "Impossible de créer un élément", 16)
End
EndIf
EndIf
ProcedureReturn
EndProcedure
ClearClipboard()
If MessageRequester("Doublons", "Laisser les doublons .", #PB_MessageRequester_YesNo ) = 6
GarderDoublons = #True
EndIf
If ExamineDirectory(0, Directory$, "Purei*.pb")
While NextDirectoryEntry(0)
If DirectoryEntryType(0) = #PB_DirectoryEntry_File
SourceFileName = DirectoryEntryName(0)
If SourceFileName <> "PureIconManger_Viewer_PackFile.pb"
If OpenFile(1, SourceFileName)
Position = ListIndex(MyDeclarations())
If AddElement(MyDeclarations()) = 0
CloseFile(1)
FinishDirectory(0)
MessageRequester("Erreur", "Impossible de créer un élément", 16)
End
EndIf
Element_Courant = ListIndex(MyDeclarations())
MyDeclarations()\NomProc = "; Fichier " + SourceFileName
While Eof(1) = 0
Chaine = ReadString(1)
CheckString(Chaine)
Wend
If ListIndex(MyDeclarations()) = Element_Courant
;// le fichier ne contient pas d'API
;// on supprime l'élément qui contient le nom de fichier
DeleteElement(MyDeclarations())
EndIf
CloseFile(1)
Else
MessageRequester("Information", "Desolé, une erreur s'est produite lors de l'acces au fichier "+SourceFileName+" !", 0)
End
EndIf
EndIf
EndIf
Wend
FinishDirectory(0)
ForEach MyDeclarations()
Tmpchaine + MyDeclarations()\API_Name+MyDeclarations()\NomProc + RC
Next
SetClipboardText(Tmpchaine)
MessageRequester("Infos", "Opération terminée", 0)
EndIf