Como la funcion de obtención del número de volumen del disco ya devuelve un número no veo porque se ha de pasar a hexadecimal, para despues volverlo a decimal, le hacemos los siguientes mínimos cambios y ya estaría arreglado el problema.
Código:
function GetVolumeID(DriveChar: Char): String;
var
MaxFileNameLength, VolFlags, SerNum: DWord;
begin
if GetVolumeInformation(PChar(DriveChar + ':\'), nil, 0,
@SerNum, MaxFileNameLength, VolFlags, nil, 0)
then
begin
Result := IntToStr(SerNum);
end
else
Result := '';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption:=GetVolumeID('C');
end;
Un Saludo.