获取丰富编辑库的版本

Igo*_*gor 6 dll version richedit

全部,

是否可以获得程序使用的 RichEdit 控件的版本?

| Version    | Class name    | Library      | Shipped with    | New features
|------------|---------------|--------------|-----------------|    
| 1.0        | "RICHEDIT"    | Riched32.dll | Windows 95      |
| 2.0        | "RichEdit20W" | Riched20.dll | Windows 98      | ITextDocument
| 3.0        | "RichEdit20W" | Riched20.dll | Windows 2000    | ITextDocument2
| 3.1        | "RichEdit20W" | Riched20.dll | Server 2003     |
| 4.1        | "RICHEDIT50"  | Msftedit.dll | Windows XP SP1  | tomApplyTmp
| 7.5        | "RICHEDIT50"  | Msftedit.dll | Windows 8       | ITextDocument2 (new), ITextDocument2Old, Spell checking, Ink support, Office Math
| 8.5        | "RICHEDIT50"  | Msftedit.dll | Windows 10      | LocaleName, more image formats
Run Code Online (Sandbox Code Playgroud)

我知道我可以只拥有一些变量,并在Msftedit.dll库是否加载时适当地分配它。但是,如果我执行 load RichEd20.dll,我可以获得 RichEdit 2 或 RichEdit 3 实现。他们是完全不同的。后者添加了很多东西。

如果我确实加载了Msftedit.dll7.5,则有一些功能在早期版本中不可用(例如自动拼写检查)。

甚至有可能同一进程可以加载所有三个 DLL,甚至可以在同一进程中使用所有三个版本的 RichEdit:

  • "RICHEDIT"→ 1.0
  • "RichEdit20W"→ 2.0、3.0
  • "RICHEDIT50"→ 4.1、7.5、8.5

给定一个 RichEdit 控件(例如 WinForms RichTextBox、 WPF RichTextBox、 WinRT RichEditBox、 VCL TRichEdit),有没有办法确定 RichEdit 控件的版本?

或者也许我可以通过可用的 Windows 版本以某种方式区分它们?

dar*_*une 1

如果使用您可能会发现以下代码片段对于读出类名很有用:

  TCHAR className[MAX_PATH];
  GetClassName(GetRichEditCtrl().GetSafeHwnd(), className, _countof(className));
Run Code Online (Sandbox Code Playgroud)

GetRichEditCtrl()是另一个控件上的功能,您可能需要用任何给您提供hwnd控件的东西来替换。

另一种方法是使用像spy++这样的工具来检查类名