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;
残念ながら、DeviceIoControl()
常に返さFalse
れ、後で確認するGetLastError()
と、エラー 87、「パラメーターが正しくありません」で返されます。
InformationLevel
を からBatterySerialNumber
に変更するだけでコードが完全に機能するため、これはあまり意味がありませんBatteryUniqueID
。hbat
また、以前のコードの他の呼び出しでバッテリーへのハンドル ( ) を使用したことがありますがGetSerialNumber
、それらはすべて正常に動作し、これが失敗した後に他の呼び出しを行うこともできるので、それは問題ではありません。
何か案は?私は本当に途方に暮れています。