Page 1 sur 2
Récupérer la version du RichEdit du système
Publié : jeu. 17/août/2006 10:27
par Progi1984
Code : Tout sélectionner
Procedure.s GetFileVersionInfo(File.s)
Protected iLibrary.l, iFunctionInfo.l, iFunctionSize.l, iFunctionQry.l, *HoldVersion.l, HoldResult.l, HoldBuffer.l, HoldEmpty.l
Protected HoldString.s, HoldReturn.s
Protected *HoldInfo.VS_FIXEDFILEINFO
iLibrary = OpenLibrary(#PB_Any, "version.dll")
If iLibrary
iFunctionInfo = GetFunction(iLibrary, "GetFileVersionInfoA")
iFunctionSize = GetFunction(iLibrary, "GetFileVersionInfoSizeA")
iFunctionQry = GetFunction(iLibrary, "VerQueryValueA")
If iFunctionInfo And iFunctionSize And iFunctionQry
HoldBuffer = CallFunctionFast(iFunctionSize, @File, @HoldEmpty)
HoldReturn = Space(HoldBuffer)
HoldResult = CallFunctionFast(iFunctionInfo, File, 0, HoldBuffer, @HoldReturn)
HoldResult = CallFunctionFast(iFunctionQry, @HoldReturn, "\", @HoldEmpty, @HoldBuffer)
*HoldInfo = AllocateMemory(SizeOf(VS_FIXEDFILEINFO))
CopyMemory(HoldEmpty, *HoldInfo, SizeOf(VS_FIXEDFILEINFO))
HoldString = Str(*HoldInfo\dwFileVersionMS >> 16 & $FFFF) + "." + Str(*HoldInfo\dwFileVersionMS & $FFFF) + "." + Str(*HoldInfo\dwFileVersionLS >> 16 & $FFFF) + "." + Str(*HoldInfo\dwFileVersionLS & $FFFF)
CloseLibrary(iLibrary)
FreeMemory(*HoldInfo)
HoldReturn = Space(0)
If HoldResult
ProcedureReturn HoldString
Else
ProcedureReturn ""
EndIf
EndIf
CloseLibrary(iLibrary)
EndIf
EndProcedure
ProcedureDLL.s GetRichEditVersion()
Protected path_system.s, dir.s
path_system= GetEnvironmentVariable("Path")
For i=1 To CountString(GetEnvironmentVariable("Path"),";")+1
dir = StringField(GetEnvironmentVariable("Path"),i,";")
If Right(dir,1)<>"\"
dir+"\"
EndIf
; MSFTEDIT.DLL (à partir de WXP SP1) -> richedit 4.1+
If FileSize(dir+"MSFTEDIT.DLL")>0
ProcedureReturn "4.1"
ElseIf FileSize(dir+"RICHED20.DLL")>0
version.s=GetFileVersionInfo(dir+"RICHED20.DLL")
; RICHED20.DLL 5.30 (à partir de W2K/ME) -> richedit 3.0
If Right(version,3)="5.3"
ProcedureReturn "3.0"
; RICHED20.DLL 5.0 (à partir de W98/NT4) -> richedit 2.0
ElseIf Right(version,3)="5.0"
ProcedureReturn "2.0"
EndIf
; RICHED32.DLL (à partir de W95) -> richedit 1.0
ElseIf FileSize(dir+"RICHED32.DLL")>0
ProcedureReturn "1.0"
EndIf
Next
EndProcedure
Debug GetRichEditVersion()
Pouvez- vous tester ? Merci
Publié : jeu. 17/août/2006 10:35
par Anonyme2
4.1
Xp home edition SP2 et tout le fourbi qui va avec

Publié : jeu. 17/août/2006 10:48
par Dr. Dri
chaine vide (windows 98 se)
Dri
Publié : jeu. 17/août/2006 11:06
par Progi1984
Peux tu tester quelle rich*.dll tu as ? dans ton c:\windows\system32
Publié : jeu. 17/août/2006 11:56
par Dr. Dri
dans le dossier System : RICHED.DLL
version du fichier : 4.00.834.839
Dri
Publié : jeu. 17/août/2006 13:07
par Flype
4.1 pour moi (XP SP2)
Publié : jeu. 17/août/2006 13:08
par SPH
4.1 XP SP1 !
Publié : jeu. 17/août/2006 13:15
par Progi1984
@Dri : N'as tu pas de
MSFTEDIT.DLL
RICHED20.DLL
RICHED32.DLL
dans ton système ?
Publié : jeu. 17/août/2006 13:35
par Dr. Dri
riched20.dll : version 5.30.23.1200
riched32.dll : version 4.00.834.839
Dri
Publié : jeu. 17/août/2006 13:43
par Progi1984
Peux tu me renvoyer le debug de code là :
Code : Tout sélectionner
Procedure.s GetFileVersionInfo(File.s)
Protected iLibrary.l, iFunctionInfo.l, iFunctionSize.l, iFunctionQry.l, *HoldVersion.l, HoldResult.l, HoldBuffer.l, HoldEmpty.l
Protected HoldString.s, HoldReturn.s
Protected *HoldInfo.VS_FIXEDFILEINFO
iLibrary = OpenLibrary(#PB_Any, "version.dll")
If iLibrary
iFunctionInfo = GetFunction(iLibrary, "GetFileVersionInfoA")
iFunctionSize = GetFunction(iLibrary, "GetFileVersionInfoSizeA")
iFunctionQry = GetFunction(iLibrary, "VerQueryValueA")
If iFunctionInfo And iFunctionSize And iFunctionQry
HoldBuffer = CallFunctionFast(iFunctionSize, @File, @HoldEmpty)
HoldReturn = Space(HoldBuffer)
HoldResult = CallFunctionFast(iFunctionInfo, File, 0, HoldBuffer, @HoldReturn)
HoldResult = CallFunctionFast(iFunctionQry, @HoldReturn, "\", @HoldEmpty, @HoldBuffer)
*HoldInfo = AllocateMemory(SizeOf(VS_FIXEDFILEINFO))
CopyMemory(HoldEmpty, *HoldInfo, SizeOf(VS_FIXEDFILEINFO))
HoldString = Str(*HoldInfo\dwFileVersionMS >> 16 & $FFFF) + "." + Str(*HoldInfo\dwFileVersionMS & $FFFF) + "." + Str(*HoldInfo\dwFileVersionLS >> 16 & $FFFF) + "." + Str(*HoldInfo\dwFileVersionLS & $FFFF)
CloseLibrary(iLibrary)
FreeMemory(*HoldInfo)
HoldReturn = Space(0)
If HoldResult
ProcedureReturn HoldString
Else
ProcedureReturn ""
EndIf
EndIf
CloseLibrary(iLibrary)
EndIf
EndProcedure
ProcedureDLL.s GetRichEditVersion()
Protected path_system.s, dir.s
path_system= GetEnvironmentVariable("Path")
For i=1 To CountString(GetEnvironmentVariable("Path"),";")+1
dir = StringField(GetEnvironmentVariable("Path"),i,";")
Debug dir
If Right(dir,1)<>"\"
dir+"\"
EndIf
; MSFTEDIT.DLL (à partir de WXP SP1) -> richedit 4.1+
If FileSize(dir+"MSFTEDIT.DLL")>0
Debug "-> MSFTEDIT.DLL Found"
ProcedureReturn "4.1"
ElseIf FileSize(dir+"RICHED20.DLL")>0
Debug "-> RICHED20.DLL Found"
version.s=GetFileVersionInfo(dir+"RICHED20.DLL")
Debug "--> "+version
; RICHED20.DLL 5.30 (à partir de W2K/ME) -> richedit 3.0
If Right(version,3)="5.3"
ProcedureReturn "3.0"
; RICHED20.DLL 5.0 (à partir de W98/NT4) -> richedit 2.0
ElseIf Right(version,3)="5.0"
ProcedureReturn "2.0"
EndIf
; RICHED32.DLL (à partir de W95) -> richedit 1.0
ElseIf FileSize(dir+"RICHED32.DLL")>0
Debug "-> RICHED32.DLL Found"
ProcedureReturn "1.0"
EndIf
Debug "-------------------"
Next
EndProcedure
Debug "=>"+GetRichEditVersion()
merci d'avance et dsl de t'embeter !
Publié : jeu. 17/août/2006 14:18
par Dr. Dri
C:\WINDOWS
-------------------
C:\WINDOWS\COMMAND
-------------------
=>
Dri
Publié : jeu. 17/août/2006 15:05
par Progi1984
Réessaie ce code, stp :
Code : Tout sélectionner
Procedure.s GetFileVersionInfo(File.s)
Protected iLibrary.l, iFunctionInfo.l, iFunctionSize.l, iFunctionQry.l, *HoldVersion.l, HoldResult.l, HoldBuffer.l, HoldEmpty.l
Protected HoldString.s, HoldReturn.s
Protected *HoldInfo.VS_FIXEDFILEINFO
iLibrary = OpenLibrary(#PB_Any, "version.dll")
If iLibrary
iFunctionInfo = GetFunction(iLibrary, "GetFileVersionInfoA")
iFunctionSize = GetFunction(iLibrary, "GetFileVersionInfoSizeA")
iFunctionQry = GetFunction(iLibrary, "VerQueryValueA")
If iFunctionInfo And iFunctionSize And iFunctionQry
HoldBuffer = CallFunctionFast(iFunctionSize, @File, @HoldEmpty)
HoldReturn = Space(HoldBuffer)
HoldResult = CallFunctionFast(iFunctionInfo, File, 0, HoldBuffer, @HoldReturn)
HoldResult = CallFunctionFast(iFunctionQry, @HoldReturn, "\", @HoldEmpty, @HoldBuffer)
*HoldInfo = AllocateMemory(SizeOf(VS_FIXEDFILEINFO))
CopyMemory(HoldEmpty, *HoldInfo, SizeOf(VS_FIXEDFILEINFO))
HoldString = Str(*HoldInfo\dwFileVersionMS >> 16 & $FFFF) + "." + Str(*HoldInfo\dwFileVersionMS & $FFFF) + "." + Str(*HoldInfo\dwFileVersionLS >> 16 & $FFFF) + "." + Str(*HoldInfo\dwFileVersionLS & $FFFF)
CloseLibrary(iLibrary)
FreeMemory(*HoldInfo)
HoldReturn = Space(0)
If HoldResult
ProcedureReturn HoldString
Else
ProcedureReturn ""
EndIf
EndIf
CloseLibrary(iLibrary)
EndIf
EndProcedure
ProcedureDLL.s GetRichEditVersion()
Protected path_system.s, dir.s
path_system= GetEnvironmentVariable("Path")+";c:\windows\system32"
For i=1 To CountString(GetEnvironmentVariable("Path"),";")+1
dir = StringField(GetEnvironmentVariable("Path"),i,";")
Debug dir
If Right(dir,1)<>"\"
dir+"\"
EndIf
; MSFTEDIT.DLL (à partir de WXP SP1) -> richedit 4.1+
If FileSize(dir+"MSFTEDIT.DLL")>0
Debug "-> MSFTEDIT.DLL Found"
ProcedureReturn "4.1"
ElseIf FileSize(dir+"RICHED20.DLL")>0
Debug "-> RICHED20.DLL Found"
version.s=GetFileVersionInfo(dir+"RICHED20.DLL")
Debug "--> "+version
; RICHED20.DLL 5.30 (à partir de W2K/ME) -> richedit 3.0
If Right(version,3)="5.3"
ProcedureReturn "3.0"
; RICHED20.DLL 5.0 (à partir de W98/NT4) -> richedit 2.0
ElseIf Right(version,3)="5.0"
ProcedureReturn "2.0"
EndIf
; RICHED32.DLL (à partir de W95) -> richedit 1.0
ElseIf FileSize(dir+"RICHED32.DLL")>0
Debug "-> RICHED32.DLL Found"
ProcedureReturn "1.0"
EndIf
Debug "-------------------"
Next
EndProcedure
Debug "=>"+GetRichEditVersion()
Publié : jeu. 17/août/2006 22:52
par Dr. Dri
j'ai eu exactement le même debug alors je me suis penché sur le problème et j'ai fait ca:
Code : Tout sélectionner
Procedure.s GetFileVersion(File.s)
Protected Version.s, Library.l
Protected Size.l, *Info, Handle.l
Protected *Version.VS_FIXEDFILEINFO, Len.l
Library = OpenLibrary(#PB_Any, "version.dll")
If Library
Size = CallFunction(Library, "GetFileVersionInfoSizeA", File, @Handle)
If Size
*Info = AllocateMemory(Size)
EndIf
If *Info
If CallFunction(Library, "GetFileVersionInfoA", File, Handle, Size, *Info)
CallFunction(Library, "VerQueryValueA", *Info, "\", @*Version, @Len)
EndIf
If Len = SizeOf(VS_FIXEDFILEINFO)
Version = Str( HiWord(*Version\dwFileVersionMS) ) + "."
Version + Str( LoWord(*Version\dwFileVersionMS) ) + "."
Version + Str( HiWord(*Version\dwFileVersionLS) ) + "."
Version + Str( LoWord(*Version\dwFileVersionLS) )
EndIf
FreeMemory(*Info)
EndIf
CloseLibrary(Library)
EndIf
ProcedureReturn Version
EndProcedure
Debug "MSFTEDIT.DLL : " + GetFileVersion("MSFTEDIT.DLL")
Debug "RICHED20.DLL : " + GetFileVersion("RICHED20.DLL")
Debug "RICHED32.DLL : " + GetFileVersion("RICHED32.DLL")
Dri
Publié : ven. 18/août/2006 10:30
par gnozal
Sinon, on peut aussi récupérer la classe du RichEdit :
Code : Tout sélectionner
Procedure.s GetGadgetClass(hGadget.l)
Protected Class.s
Class = Space(255)
GetClassName_(hGadget, @Class, 254)
ProcedureReturn Class
EndProcedure
; RichEdit 20 => "RichEdit20A"
; RichEdit 32 => "RichEdit"
; RichEdit XP => "RichEdit50W"
; autres ?
Publié : ven. 18/août/2006 15:55
par Progi1984
Est ce que vous pouvez me renvoyer le retour de la fonction de gnozal, et dire si il ya des retours différents de
Code : Tout sélectionner
RichEdit 20 => "RichEdit20A"
RichEdit 32 => "RichEdit"
RichEdit XP => "RichEdit50W"