Récupérer la version du RichEdit du système

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Récupérer la version du RichEdit du système

Message 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
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

4.1

Xp home edition SP2 et tout le fourbi qui va avec :D
Dernière modification par Anonyme2 le jeu. 17/août/2006 10:50, modifié 1 fois.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

chaine vide (windows 98 se)

Dri
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Peux tu tester quelle rich*.dll tu as ? dans ton c:\windows\system32
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

dans le dossier System : RICHED.DLL
version du fichier : 4.00.834.839

Dri
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

4.1 pour moi (XP SP2)
Image
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

4.1 XP SP1 !

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

@Dri : N'as tu pas de
MSFTEDIT.DLL
RICHED20.DLL
RICHED32.DLL
dans ton système ?
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

riched20.dll : version 5.30.23.1200
riched32.dll : version 4.00.834.839

Dri
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message 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 !
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

C:\WINDOWS
-------------------
C:\WINDOWS\COMMAND
-------------------
=>
Dri
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message 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()
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message 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 ?
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message 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" 
Répondre