小编Res*_*ess的帖子

如何正确检索电池序列号?

在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,"参数不正确."

这没有多大意义,因为如果我简单地将InformationLevelfrom 更改为BatterySerialNumberto BatteryUniqueID …

delphi winapi deviceiocontrol

7
推荐指数
1
解决办法
2144
查看次数

标签 统计

delphi ×1

deviceiocontrol ×1

winapi ×1