AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Dateiendung .mp3 Registrierung klappt nicht!
Thema durchsuchen
Ansicht
Themen-Optionen

Dateiendung .mp3 Registrierung klappt nicht!

Ein Thema von dadu · begonnen am 8. Apr 2004 · letzter Beitrag vom 9. Apr 2004
Antwort Antwort
dadu

Registriert seit: 17. Apr 2003
Ort: Dattenberg
102 Beiträge
 
Delphi 2005 Personal
 
#1

Dateiendung .mp3 Registrierung klappt nicht!

  Alt 8. Apr 2004, 14:34
Hi Leute.
Will die Dateiendung .mp3 mit meinem Programm und meinem ICON verknüpfen
[Wenn man also eine mp3 im Explorer sieht, hat diese mein Icon; bei doppelklick wird mein Programm geöffnet!]

Hab mir auch aus dem Netz folgenden Code geholt:
Code:
function tmainform.InstallExt(Extension, ExtDescription, FileDescription,
  OpenWith, ParamString: string; IconIndex: Integer): Boolean;
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    with Reg do
    begin
      RootKey := HKEY_CLASSES_ROOT;
      OpenKey(Extension, True);
      WriteString('', ExtDescription);
      OpenKey('\' + ExtDescription, True);
      WriteString('', FileDescription);
      OpenKey('DefaultIcon', True);
      WriteString('', OpenWith + ',' + IntToStr(IconIndex));
      OpenKey('\' + ExtDescription + '\Shell\Open\Command', True);
      WriteString('', '"' + OpenWith + '" "' + ParamString + '"');
    end;
    Result := True;
  except
    Result := False;
  end;
  Reg.Free;
end;



der hat auch immer funktioniert, doch wenn ich jetzt den MS Mediaplayer oder Winamp starte, und diese dann sofort .mp3 mit sich selbst wieder verknüpfen, funzt der Code nicht mehr( Bei erneutem Öffnen meines Programms und ausführen der oben genannten Routine!)

Also: Was machen die großen Player, damit ihr ICON sofort angezeigt wird, und das jede mp3 mit dem jeweiligen Player geöffnet wird???

DaDu
  Mit Zitat antworten Zitat
Benutzerbild von S2B
S2B

Registriert seit: 1. Feb 2004
Ort: Aachen
1.268 Beiträge
 
#2

Re: Dateiendung .mp3 Registrierung klappt nicht!

  Alt 8. Apr 2004, 15:51
Also ich hätte das so gemacht:
Delphi-Quellcode:
   
  regist:=TRegistry.Create;
  With regist do
  try
    RootKey:=HKEY_CLASSES_ROOT;
    OpenKey('.mp3', true);
    WriteString('', 'Programmname');
    CloseKey;
    OpenKey('Programmname', true);
    WriteString('', 'MP3-Datei');
    OpenKey('DefaultIcon', true);
    WriteString('', 'Pfad zum Icon');
    CloseKey;
    OpenKey('Programmname\Shell\Open', true);
    WriteString('', 'Mit Programm öffnen');
    CloseKey;
    OpenKey('Programmname\Shell\Open\Command', true);
    WriteString('', '"Pfad zur exe-Datei" "%1"');
    CloseKey;
  finally free;
  end;
Gruß
S2B
Simon Praetorius
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#3

Re: Dateiendung .mp3 Registrierung klappt nicht!

  Alt 8. Apr 2004, 19:06
Zitat von S2B:
Also ich hätte das so gemacht:
Und was ist da jetzt anders dran?

Zitat von dadu:
Was machen die großen Player, damit ihr ICON sofort angezeigt wird, [...]
SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST,nil,nil);
Zitat:
[...] und das jede mp3 mit dem jeweiligen Player geöffnet wird???
Schätzungsweise wird´s eine Option geben, mit der das Programm die Endung sofort wieder auf sich registriert wenn das nicht der Fall ist. Gibt´s ja beim IE bspw. auch, aber der fragt zumindest nach ob er sich wieder als Standard eintragen soll.

Im Prinzip müsstest du also auch so rabiat sein und die Endung immer wieder auf dein Programm registrieren. Mach´s aber abschaltbar, so dass der User noch die Wahl hat.
  Mit Zitat antworten Zitat
dadu

Registriert seit: 17. Apr 2003
Ort: Dattenberg
102 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Dateiendung .mp3 Registrierung klappt nicht!

  Alt 9. Apr 2004, 10:21
@MathiasSimmack

Was macht "SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST,ni l,nil);"?

Also hab das mal eingebunden, hat aber nicht das Icon meines Programms mit der Endung .mp3 verknüpft.

@alle

Hab wohl das zentrale Problem gefunden!:
In der registry ist mit meiner procedure alles geändert, aber es gibt unter Windows noch eine Funktion ("Systemsteuerung/Ordneroptionen/Dateitypen") dort kann man auch ein Programm einer Endung zuordnen! Und das hatte ich auch gemacht, nämlich dem MS Mediaplayer.
Problem: Wenn man dort das Programm ändert wird nicht der bekannte registry-Pfad aus meiner Procedure geändert=> Es gibt noch einen anderen Ort, wo Windows Datei-Endungs-Verknüpfungen speichert! (Nur wo?)

PS: Diese Sytemsteuerungs-Einstellung steht wie's aussieht auch über der Standart registry Einstellung(Windows ignoriert deshalb den Eintrag durch meine Procedure)

DADU
  Mit Zitat antworten Zitat
Benutzerbild von S2B
S2B

Registriert seit: 1. Feb 2004
Ort: Aachen
1.268 Beiträge
 
#5

Re: Dateiendung .mp3 Registrierung klappt nicht!

  Alt 9. Apr 2004, 11:02
Zitat von MathiasSimmack:
Zitat von S2B:
Also ich hätte das so gemacht:
Und was ist da jetzt anders dran?
Ich hab gedacht, dass das ganze irgendwie gar nicht funktionieren dürfte , weil ja die geöffneten Keys gar nicht mehr geschlossen werden (mit "CloseKey;"). Kann mir vielleicht jemand erklären, warum das trotzdem funktioniert?

Gruß
S2B
Simon Praetorius
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Dateiendung .mp3 Registrierung klappt nicht!

  Alt 9. Apr 2004, 11:38
Moin S2B,

Zitat von S2B:
Kann mir vielleicht jemand erklären, warum das trotzdem funktioniert?
Weil der Wert sofort beim Write in die Registry geschrieben wird.
Durch das Schliessen des Handels wird "lediglich" die Resource wieder freigegeben (und sollte deswegen auch auf jeden Fall gemacht werden. Stichwort Resourcenschutzblock)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#7

Re: Dateiendung .mp3 Registrierung klappt nicht!

  Alt 9. Apr 2004, 13:02
Zitat von dadu:
@MathiasSimmack

Was macht "SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST,ni l,nil);"?
Na, ich habe auf deine Frage geantwortet.
Zitat:
Was machen die großen Player, damit ihr ICON sofort angezeigt wird [...]


Zitat:
Also hab das mal eingebunden, hat aber nicht das Icon meines Programms mit der Endung .mp3 verknüpft.
Wie könnte es auch, wo das doch mit der Registry gar nichts zu tun hat.
  Mit Zitat antworten Zitat
dadu

Registriert seit: 17. Apr 2003
Ort: Dattenberg
102 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Dateiendung .mp3 Registrierung klappt nicht!

  Alt 9. Apr 2004, 13:56
Hab die Antwort selbst gefunden:

Benutzt folgenden Code und ihr setzt euch gegen alle großen Programme durch

Überall wo "DaDuMediaPlayer5" muss dann euer Name rein
Delphi-Quellcode:


     function tmainform.InstallExt(Extension, ExtDescription, FileDescription,
  OpenWith, ParamString: string; IconIndex: Integer): Boolean;
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    with Reg do
    begin
   
 //Normale Teil
      RootKey := HKEY_CLASSES_ROOT;
      OpenKey(Extension, True);
      WriteString('', ExtDescription);
      OpenKey('\' + ExtDescription, True);
      WriteString('', FileDescription);
      OpenKey('DefaultIcon', True);
      WriteString('', OpenWith + ',' + IntToStr(IconIndex));
      OpenKey('\' + ExtDescription + '\Shell\Open\Command', True);
      WriteString('', '"' + OpenWith + '" "' + ParamString + '"');
   
 //Neu Teil

      RootKey := HKEY_Current_User;
      OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\',
        True);
      if KeyExists('.mp3') then DeleteKey('.mp3');
      RootKey := HKEY_Local_Machine;
      OpenKey('\Software\Classes\DaDuMediaPlayer5\DefaultIcon', true);
      WriteString('', Application.ExeName + ',' + IntToStr(1));//Pfadname+ Iconindex
      OpenKey('\Software\Classes\DaDuMediaPlayer5\Shell\Open\Command', true);
      WriteString('', '"' + Application.ExeName + '" "' + '%1' + '"');
      OpenKey('\Software\Classes\.mp3', true);
      WriteString('', 'DaDuMediaPlayer5');
      OpenKey('\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3', True);
      WriteString('', 'DaDuMediaPlayer5');
      SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);// aktuallisiert die Icons
    end;
    Result := True;
  except
    Result := False;
  end;
  Reg.Free;
end;
Funzt perfekt!
Hab mir einfach mal angeguckt wo Windows dieses Öffnen mit aus der Systemsteuerung in der registry speichert

Zitat:
Stichwort Resourcenschutzblock
Was ist das?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Dateiendung .mp3 Registrierung klappt nicht!

  Alt 9. Apr 2004, 14:08
Moin dadu,

Zitat von dadu:
Zitat:
Stichwort Resourcenschutzblock
Was ist das?
Lustig, das Ende des Satzes ist Dir aufgefallen, der Anfang nicht

Vorweg: Benutzt hast Du ihn sogar, nämlich im Zusammenhang mit dem Registry Objekt

Allgemein sieht der so aus:

Delphi-Quellcode:
<Resource belegen>
try
  <Mit der Resource arbeiten>
finally
  <Resource freigeben>
end;
Wo Du es vergessen hast:
Bei diversen OpenKey Zeilen.
Zu jedem OpenKey gehört auch ein CloseKey, da hier jedesmal eine Resource in Form eines Handles belegt wird.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz