Einzelnen Beitrag anzeigen

Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
378 Beiträge
 
Delphi 11 Alexandria
 
#1

RichEdit - Version ermitteln

  Alt 19. Dez 2017, 00:12
Welche RichEdit-Version hab ich ? ... interessiert den Standard-User sicher eher nicht - Aber wenn dann doch / notwendig ?
Info's dazu sind im WWW eher 'mau' oder schwer/wenig aussagefähig zu finden.
Gibt's nun nur bis V4 oder doch bis V8 oder noch höher ? Lt. MSDN weder ich da nicht schlau betreff Versionen.
... das ist ähnlich wie bei Erkennung der WIN-Versionen.
Ich hab da mal neben WWW-Quellen auch bei den Jedi's rumgesucht und daraus was gebastelt:
Delphi-Quellcode:
// -----------------------------------------------------------------------------
// !!! https://github.com/dpradov/keynote-nf/issues/530
function CheckRichEditVersion() : integer;
var
  FileName: string;
  InfoSize, Wnd: DWORD;
  VerBuf: Pointer;
  FI: PVSFixedFileInfo;
  VerSize: DWORD;
  GLibHandle: THandle;
  VA, VB : integer;
begin
  result := 0; // try 1st
  GLibHandle := SafeLoadLibrary('MSFTEDIT.DLL'); // try this first !
  if (GLibHandle > 0) and (GLibHandle <= HINSTANCE_ERROR) then GLibHandle := 0;
  if GLibHandle = 0 then // try this 2nd ...
  begin
    GLibHandle := SafeLoadLibrary('RICHED32.DLL');
    if (GLibHandle > 0) and (GLibHandle <= HINSTANCE_ERROR) then GLibHandle := 0;
  end;
  if GLibHandle = 0 then // try at last ...
  begin
    GLibHandle := SafeLoadLibrary('RICHED20.DLL');
    if (GLibHandle > 0) and (GLibHandle <= HINSTANCE_ERROR) then GLibHandle := 0;
  end;
  if GLibHandle > HINSTANCE_ERROR then // anything found ?!
  begin
    FileName := GetModuleName(GLibHandle);
    InfoSize := GetFileVersionInfoSize(PChar(FileName), Wnd);
    if InfoSize <> 0 then
    begin
      GetMem(VerBuf, InfoSize);
      try
        if GetFileVersionInfo(PChar(FileName), Wnd, InfoSize, VerBuf) then
          if VerQueryValue(VerBuf, '\', Pointer(FI), VerSize) then
          begin
            VA := FI.dwFileVersionMS shr 16;
            VB := FI.dwFileVersionMS and $FFFF;
          end;
      finally
        FreeMem(VerBuf);
      end;
    end;
  end;
  case VA of
    5: result := VB div 10;
    6: begin // V 7.5 ?!
         case VB of
           1..2 : result := 7; // Win 8
           3..9 : result := 8; // Win 8.1+
         end;
       end;
    10: begin // V 7.5 ?!
        // ...to be checked for version 7 or 8 !?
          result := 8; // Win 10.0 ... or 10 ?!
        end;
    // WinVersion to be checked before !
    11: result := 5; // OFFICE 2003
    12: result := 6; // OFFICE 2007
    14: result := 6; // OFFICE 2010
    15: result := 8; // OFFICE 2013
  end;
  if GLibHandle > 0 then FreeLibrary(GLibHandle); // release LIB
end;
Bei mir gibt das unter WIN 8.1 mit jeweils explizit angegebener / ausgeklammerter DLL:
- 'MSFTEDIT.DLL' = 8
- 'RICHED32.DLL' = 8
- 'RICHED20.DLL' = 3

Quizfrage:
Ist das so richtig mit der Versions-Erkennung und...oder gibt es da noch weitere Dinge zu beachten, die man so im Netz nicht findet ?

Geändert von TERWI (19. Dez 2017 um 00:37 Uhr)
  Mit Zitat antworten Zitat