【发布时间】:2013-03-28 08:07:32
【问题描述】:
我有一个项目使用 Delphi XE2 显示版本类型从“Windows 95”到“Windows 8”的 Windows 版本。首先,我尝试了“TOSVersion”功能。但问题是:
procedure TMainForm.BitBtn01Click(Sender: TObject);
var
VersionNameOfOperatingSystem : String;
begin
VersionNameOfOperatingSystem := TOSVersion.Name;
Edit01.Text := VersionNameOfOperatingSystem;
end
在 Windows 8 环境中仅显示“Windows”,另一个问题是 Ii 无法检测到“Windows 版”。然后我尝试了“GetProductInfo”功能。但这里还有一个问题:
function GetProductInfo(dwOSMajorVersion, dwOSMinorVersion, dwSpMajorVersion,
dwSpMinorVersion: DWORD; pdwReturnedProductType: PDWORD): BOOL stdcall;
external kernel32;
procedure TMainForm.BitBtn01Click(Sender: TObject);
var
rpt: cardinal;
begin
if GetProductInfo(6, 0, 0, 0, @rpt) then Edit02.Text :=IntToStr(rpt);
end
和
function GetProductInfo(dwOSMajorVersion, dwOSMinorVersion, dwSpMajorVersion,
dwSpMinorVersion: DWORD; pdwReturnedProductType: PDWORD): BOOL stdcall;
external kernel32;
procedure TMainForm.BitBtn01Click(Sender: TObject);
var
rpt: cardinal;
begin
if GetProductInfo(6, 1, 0, 0, @rpt) then Edit02.Text :=IntToStr(rpt);
end
和
function GetProductInfo(dwOSMajorVersion, dwOSMinorVersion, dwSpMajorVersion,
dwSpMinorVersion: DWORD; pdwReturnedProductType: PDWORD): BOOL stdcall;
external kernel32;
procedure TMainForm.BitBtn01Click(Sender: TObject);
var
rpt: cardinal;
begin
if GetProductInfo(6, 2, 0, 0, @rpt) then Edit02.Text :=IntToStr(rpt);
end
和
function GetProductInfo(dwOSMajorVersion, dwOSMinorVersion, dwSpMajorVersion,
dwSpMinorVersion: DWORD; pdwReturnedProductType: PDWORD): BOOL stdcall;
external kernel32;
procedure TMainForm.BitBtn01Click(Sender: TObject);
var
rpt: cardinal;
begin
if GetProductInfo(6, 2, 2, 2, @rpt) then Edit02.Text :=IntToStr(rpt);
end
如果我在 Windows Vista Enterprise SP2 中运行已编译的 exe 文件,则产生相同的结果,并且不能使用早期版本的 Windows。如果我按如下方式调用“TOSVersion”
begin
TOSVersion.Platform of
pfWindows :
begin
.
.
.
.
end
else
beging
.
.
.
end
end;
然后调用“GetProductInfo”然后我得到“错误”,告诉两者不能同时调用。 最后我尝试了“OSVERSIONINFO 结构”来识别它是否是“服务器”和“Windows XP 版本类型”的“GetVersionEx 函数”。我完全困惑如何开始我的编程。这个论坛有很多经验丰富的程序员。任何人都可以写下完整的程序。我用谷歌搜索了它,但所有可用的程序都没有更新到“Windows 7”。此论坛中的一个可用版本也是“Windows 7”且未更新。请不要告诉“我们不能坐在您的键盘前为您输入代码”。请帮帮我。
【问题讨论】:
-
您要求我们编写一个完整的程序来解决您的确切问题。这就是一个过于本地化的问题的定义。所有信息都在您最近的其他问题中。
-
我再次尝试了 Ken 的代码,我收到错误,因为“[DCC 警告] Unit1.pas(148): W1036 变量 'dwOSMajorVersion' 可能尚未初始化”“[DCC 警告] Unit1. pas(148): W1036 变量 'dwOSMinorVersion' 可能尚未初始化" "[DCC 警告] Unit1.pas(148): W1036 变量 'dwSpMajorVersion' 可能尚未初始化" "[DCC 警告] Unit1.pas(148) :W1036 变量“dwSpMinorVersion”可能尚未初始化”。但我也无法显示“Result”和“tmpStr”的字符串。如果我定义 "Edit1.Text :=Result; 和 Edit2.Text:=tmpStr; 给出错误。
-
好的,我尝试编译 Ken 的代码。它不编译。它很穷。这是一个可以编译的版本。我没有全面测试过:pastebin.com/RZd1Ag4u
-
我的旧帖子中的代码已修复(自我注意:永远不要在此处发布您找到但从未编译过的代码)。现在可以编译,并且对 Windows 8 的支持最少。由于某种原因,它在我尚未追踪的 Win7 Pro (OEM) 上返回
Windows 7 Unknown Product。 -
请告诉我 Ken 的代码中的“NTBres”和“BRes”到底在做什么。
标签: delphi delphi-xe2