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 ?