在Delphi 7中,我正在开发一个库,该库实现了一个对象,该对象封装了有关连接到系统的电池的信息.除了检索电池的序列号外,它运行良好.
我用于此次调用的代码如下:
function TBattery.GetSerialNumber(hbat: THandle): boolean;
var
bqi: TBatteryQueryInformation;
Serial: PWideChar;
SerialSize,
dwOut: DWORD;
begin
Result := False;
if hbat <> INVALID_HANDLE_VALUE then
begin
ZeroMemory(@bqi, SizeOf(bqi));
dwOut := 0;
bqi.BatteryTag := FBatteryTag;
bqi.InformationLevel := BatterySerialNumber;
SerialSize := 2048;
GetMem(Serial, SerialSize);
try
ZeroMemory(Serial, SerialSize);
Result := DeviceIoControl(hbat, IOCTL_BATTERY_QUERY_INFORMATION, @bqi,
SizeOf(bqi), Serial, SerialSize, @dwOut, nil);
if Result then
FSerialNumber := Serial;
finally
FreeMem(Serial, SerialSize);
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
不幸的是,DeviceIoControl()
总是返回False
,如果我GetLastError()
之后检查然后它返回错误87,"参数不正确."
这没有多大意义,因为如果我简单地将InformationLevel
from 更改为BatterySerialNumber
to BatteryUniqueID …