在没有API的情况下检测Delphi 2007上的Windows版本

时间:2017-03-02 18:04:09

标签: windows delphi winapi delphi-2007

简单问题:如何使用Delphi 2007以可靠的方式检测Windows版本?有没有办法在没有API的情况下这样做,即只检查系统目录中的某些文件夹或文件?

提前致谢!

2 个答案:

答案 0 :(得分:8)

如果不调用Windows API函数,则无法检查文件或注册表值!

在不调用任何API的情况下检查版本的唯一方法是从PEB读取,但大多数字段都有undocumented,理论上可以从版本更改为版本。它也受兼容性垫片的影响。我不建议你这样做,但如果你坚持,那么this code可能是一个很好的起点,只需阅读OSMajorVersionOSMinorVersion成员Teb来自{{来自GetTeb)的1}}和Peb := Teb.Peb

Microsoft建议您检查是否存在所需功能,而不是检查版本。检查版本的推荐方法是使用VerifyVersionInfo,但如果您需要版本号用于显示目的,仍可继续使用已弃用的GetVersionEx。这两个函数require a manifest都可以在Windows 8.1和10上获得正确的版本。

答案 1 :(得分:0)

理论上,您可以解析EXPLORER.EXE的version details,然后推测Windows版本。但每个Delphi版本都使用Pascal的blockread()再次实现WinApi。并且想要找到Windows目录(任何驱动器上可以有任何名称)也会再次导致WinApi调用。