尝试使用以下代码来检查Windows Aero是否启用:
function AeroEnabled: boolean;
var
enabled: bool;
begin
// Function from the JwaDwmapi unit (JEDI Windows Api Library)
DwmIsCompositionEnabled(enabled);
Result := enabled;
end;
...
if (CheckWin32Version(5,4)) and (AeroEnabled) then
CampaignTabs.ColorBackground := clBlack
else begin
GlassFrame.Enabled := False;
CampaignTabs.ColorBackground := clWhite;
end;
但是,在vista之前的机器上这样做会导致应用程序崩溃,因为DWMApi.dll缺失。我也尝试过这个代码,但是它连续产生2个AV。我该怎么做呢?我使用Delphi 2010。:)
你的版本错了。Vista/2008服务器是6.0版本。你的测试应该是:
CheckWin32Version(6,0)
我相信你正在使用Delphi 2010或更高版本,在这种情况下,你应该简单地从内置的Dwmapi
单元调用DwmCompositionEnabled
函数。这将为您组织版本检查和延迟绑定。不需要绝地武士。
编辑:下面的文字是在编辑问题之前写的。
可能最简单的方法是检查Windows版本。你需要Win32MajorVersion>=6
(即Vista或2008服务器),以调用DwmIsCompositionEnabled
。
如果你正在绑定自己,那么你会调用LoadLibrary
和DWMApi.dll
,如果成功,那么你会调用GetProcAddress
来绑定。如果成功了,你就很好。但是,正如我说过的,既然你自己不处理绑定,那么版本检查可能是最简单的。
所以函数是:
function AeroEnabled: boolean;
var
enabled: bool;
begin
if Win32MajorVersion>=6 then begin
DwmIsCompositionEnabled(enabled);
Result := enabled;
end else begin
Result := False;
end;
end;
注意,我假设你的库正在进行后期绑定,即显式链接。如果没有,那么你将需要LoadLibrary/GetProcAddress,就像在@RRUZ的代码中所做的那样。