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 :D

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"