GetVersionEx在Windows 7上不起作用?

And*_*and 6 delphi winapi windows-7

在我的Windows 7系统上,GetVersionEx Windows API函数返回"6.0",表示Windows Vista,它返回"6.1".

如果重要,我使用以下Delphi代码:

function winver: string;
var
  ver: TOSVersionInfo;
begin
  ver.dwOSVersionInfoSize := SizeOf(ver);
  if GetVersionEx(ver) then
    with ver do
      result := IntToStr(dwMajorVersion) + '.' + IntToStr(dwMinorVersion) + '.' + IntToStr(dwBuildNumber) + ' (' + szCSDVersion + ')';
end;
Run Code Online (Sandbox Code Playgroud)

并返回字符串"6.0.6002(Service Pack 2)".

这不是很奇怪吗?

And*_*and 9

我现在发现GetVersionEx在我的应用程序通过Delphi 2009调试器运行时返回Vista,而Windows 7则在应用程序单独执行时返回.我还发现RAD Studio(Delphi IDE)实际上是在Windows Vista SP2的兼容模式下运行的.因此,一切都是有道理的,因为正如kibab所指出的,子进程将"继承"其父进程的兼容性设置.


Dir*_*mar 8

您的可执行文件是否在定义了任何兼容性设置的情况下运行(我认为这可能是传统Delphi应用程序的情况)?GetVersionEx各州的文件:

如果兼容模式有效,则GetVersionEx函数会在操作系统识别自身时报告操作系统,该操作系统可能不是已安装的操作系统.例如,如果兼容模式生效,GetVersionEx将报告为应用程序兼容性而选择的操作系统.

也许GetProductInfo可以做你想要的?

  • 我现在发现GetVersionEx在我的应用程序通过Delphi 2009调试器运行时返回Vista,而Windows 7则在应用程序单独执行时返回. (4认同)
  • @Andreas,IMO这个作为答案,而不是评论.即你找到了真正的答案,所以你应该这样发布.0xA3有一个很好的答案,但我认为你的答案是肯定的. (2认同)