Go to English page

ViaThinkSoft CodeLib

Dieser Artikel befindet sich in der Kategorie:
CodeLibProgrammierhilfenDelphi

function ReadNullTerminatedUnicodeString(s: TStream; offset: int64): string;
var
  iw: char;
const
  raster = 2; // Unicode String
begin
  result := '';
  s.Seek(offset, 0);
  iw := #255; // Anything <> #0
  while (iw <> #0) do
  begin
    s.Read(iw, sizeof(char));
    if (iw <> #0) then result := result + iw;
    s.Position := s.Position + (raster-sizeof(char));
  end;
end;

function getWMVTitle(fn: string): string;
var
  f: tfilestream;
begin
  result := '';
  f := tfilestream.Create(fn, fmOpenRead);
  try
    // Offset 0x5E6 valid for every WMV? Only tested with DRM material.
    result := ReadNullTerminatedUnicodeString(f, $5E2);
    if (result <> '') then exit;
    result := ReadNullTerminatedUnicodeString(f, $5E4); // confirmed
    if (result <> '') then exit;
    result := ReadNullTerminatedUnicodeString(f, $5E6); // confirmed
  finally
    f.Free;
  end;
end;

UPDATE: Achtung, leider funktioniert dieser Code nicht so recht. Es kommt vor, dass bei einigen WMV Dateien der Titel an einer anderen Position liegt und die Position 0x5E4 eine andere Metainformation beinhaltet. Eine WMV-Datei hatte beispielsweiße den Namens-Tag bei Position 0x6B4. Wer kann mir helfen, diese Funktion zu korrigieren? Ich konnte noch keine Lösung finden!
Daniel Marschall
ViaThinkSoft Mitbegründer