ViaThinkSoft CodeLib
This article is in:
CodeLib → Programming aids → Delphi
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 Co-Founder
ViaThinkSoft Co-Founder