procedure WMPOpenExt(Name: string; Ext: string; Desc: string); var I: Integer; P: Integer; WMPExt: string; WMPDesc: string; begin if WMPCount < (WMPOpenMaxChar - 3) then //minus 3 because you at least need room for a '*.' and mystical char WMP adds begin WMPOpenPresent(Ext); if RegQueryStringValue(HKLM, PlayerExts + 'Types', Uppercase(Name), WMPExt) then begin if (WMPCount + Length(Ext)) > WMPOpenMaxChar then Exit; //if only adding to current entry it can be equal to WMPOpenMaxChar if WMPExt <> '' then Ext := WMPExt + ';' + Ext; WMPCount := WMPCount - Length(WMPExt) - 1; end else if (WMPCount + Length(Ext)) >= WMPOpenMaxChar then Exit; WMPCount := WMPCount + P; RegWriteStringValue(HKLM, PlayerExts + 'Types', Uppercase(Name), Ext); RegWriteStringValue(HKLM, PlayerExts + 'MUIDescriptions', Uppercase(Name), Desc); if RegQueryStringValue(HKLM, PlayerExts + 'Descriptions', Uppercase(Name), WMPDesc) then begin if WMPDesc[Length(WMPDesc)] = ')' then Delete(WMPDesc, Length(WMPDesc), 1); RegWriteStringValue(HKLM, PlayerExts + 'Descriptions', Uppercase(Name), WMPDesc + ';' + Ext + ')'); end else RegWriteStringValue(HKLM, PlayerExts + 'Descriptions', Uppercase(Name), Desc + ' (' + Ext + ')'); end; end;