Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long
Private Declare Function GetTempFileName Lib "kernel32" Alias "GetTempFileNameA" (ByVal lpszPath As String, ByVal lpPrefixString As String, ByVal wUnique As Long, ByVal lpTempFileName As String) As Long
Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Function GetUniqueTempFileName(Optional ByVal bCreate As Boolean = True) As String
Dim sBuffer As String
sBuffer = String$(260, vbNullChar)
' aucune raison qu'on obtienne pas le chemin réel par API mais bon au pire on peut tenter par ENVIRON
If GetTempPath(Len(sBuffer), sBuffer) Then
' enlève les NULL
GetUniqueTempFileName = LeftB$(sBuffer, InStrB(1, sBuffer, vbNullChar))
Else
GetUniqueTempFileName = Environ$("TEMP")
End If
' ajoute le slash, la fonction sera alors prête à retourner le "X:\RéPERTOIRE_TEMP\"
If Not (RightB$(GetUniqueTempFileName, 2) = "\") Then GetUniqueTempFileName = GetUniqueTempFileName & "\"
' on va générer un nom temporaire de fichier temporaire
sBuffer = String$(260, vbNullChar)
Call GetTempFileName(GetUniqueTempFileName, App.EXEName, 0&, sBuffer)
sBuffer = LeftB$(sBuffer, InStrB(1, sBuffer, vbNullChar))
' retour
GetUniqueTempFileName = sBuffer
' l'API a créé le fichier, on supprime si nécessaire
If Not bCreate Then Call DeleteFile(sBuffer)
End Function