AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Programm in Kontextmenü eintragen
Thema durchsuchen
Ansicht
Themen-Optionen

Programm in Kontextmenü eintragen

Ein Thema von -=IOI=- · begonnen am 15. Aug 2005 · letzter Beitrag vom 19. Aug 2005
Antwort Antwort
-=IOI=-

Registriert seit: 5. Mär 2005
54 Beiträge
 
#1

Programm in Kontextmenü eintragen

  Alt 15. Aug 2005, 09:01
Hallo erstmal,

ich hab nen kleinen MP3 Player geschrieben und hätte nun gerne wie bei Winamp einen Eintrag im Kontextmenü von .mp3 Dateien "Datei zu Playlist hinzufügen" oder so ähnlich.

Das ganze soll dann so funktionieren, dass wenn mein Programm läuft die Datei einfach in die Playlist (ListBox) hinzugefügt wird.

Hoffe mir kann hierbei einer helfen.

Gruß Flo
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#2

Re: Programm in Kontextmenü eintragen

  Alt 15. Aug 2005, 09:40
Moin,

dazu musst du einen Registry-Eintrag vornehmen. Welche Schlüssel du brauchst und was du beachten musst erfährst du in meinen Tutorial: http://softprose.any-key.de/document...eextension.php

Bye
  Mit Zitat antworten Zitat
rantanplan99
(Gast)

n/a Beiträge
 
#3

Re: Programm in Kontextmenü eintragen

  Alt 15. Aug 2005, 09:44
Das kann man mit einer ShellExtension lösen. Siehe dazu das Beispiel das bei Delphi dabei ist unter
Code:
<Delphi Verzeichnis>\Demos\ActiveX\ShellExt\
Mit dieser ShellExtenstion kannst du dann z.B. dein Programm aufrufen mittels eines Parameters zum hinzufügen einer Datei zur Playlist, z.B. mit "-addtoplaylist <MP3Datei>".

Alternativ kannst du auch einen einfachen Registry eintrag vornehmen wenn

Code:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.mp3]
@="MeinMP3Player"

[HKEY_CLASSES_ROOT\MeinMP3Player]
@="MP3 Datei"
"EditFlags"=dword:00000000
"BrowserFlags"=dword:00000008

[HKEY_CLASSES_ROOT\MeinMP3Player\DefaultIcon]
@="C:\\Programme\\MeinMP3Player\\MeinMP3Player.exe,0"

[HKEY_CLASSES_ROOT\MeinMP3Player\shell]
@=""

[HKEY_CLASSES_ROOT\MeinMP3Player\shell\Zur Playlist hinzufügen]

[HKEY_CLASSES_ROOT\MeinMP3Player\shell\Zur Playlist hinzufügen\command]
@="\"C:\\Programme\\MeinMP3Player\\MeinMP3Player.exe\" -addtoplaylist \"%1\""
Dein Programm muss dazu den Parameter "-addtoplaylist <MP3Datei>" verarbeiten.

Dabei wird (wie im ersten Fall) jedoch jedesmal eine neue Instanz deines Players gestartet. Das musst du dann abfangen und den Befehl, eine neue MP3Datei zur Playliste hinzuzufügen, an die bereits laufende Instanz weitergeben.

rantanplan

//edit:
oh, wie ich sehe hat onlinehome dir das mit der Registry schon geschrieben wären ich getippt habe.
  Mit Zitat antworten Zitat
-=IOI=-

Registriert seit: 5. Mär 2005
54 Beiträge
 
#4

Re: Programm in Kontextmenü eintragen

  Alt 15. Aug 2005, 19:13
Erstmal danke für alle Tipps soweit.

Leider funktioniert das mit dem Registry Key nicht so richtig. Habe irgendwo gelesen, dass es unter anderem an Winamp liegen kann, habe deshalb Winamp mal deinstalliert, der Eintrag erscheint aber dennoch nicht. Bei einer Textdatei funktioniert die Registry Methode.

Woran kann es noch liegen?
  Mit Zitat antworten Zitat
-=IOI=-

Registriert seit: 5. Mär 2005
54 Beiträge
 
#5

Re: Programm in Kontextmenü eintragen

  Alt 18. Aug 2005, 18:23
so dieses problem konnte ich nun lösen un hab sogar winamp wieder installieren können.

leider hören die probleme damit nicht auf, sondern scheinen erst richtig loszugehen.

also den parameter übergeb ich meinem prog mit diesem registrywert: "D:\Desktop\Desktop.exe""%1"

mein programmcode sieht so aus:

Delphi-Quellcode:
var
   ExtendedStyle : Integer;
   dwMutex : DWORD;
   hWindow : DWORD;
   cdWork : TcsCopyDataStruct;

begin
  dwMessage := RegisterWindowMessage('{0F08433D-ADFB-4918-AE2D-8839BAC93392}');
  dwMutex := CreateMutex(nil,true,'Desktop');
  try
    if GetLastError <> ERROR_ALREADY_EXISTS then
    begin
      Form16 := TForm16.Create(Application);
      try
        ExtendedStyle := GetWindowLong(Application.Handle, GWL_EXSTYLE);
        SetWindowLong(Application.Handle, GWL_EXSTYLE, ExtendedStyle OR WS_EX_TOOLWINDOW
                                                    AND NOT WS_EX_APPWINDOW);

        Form16.Show;
        Form16.Refresh;

        Application.Initialize;
        Application.Title := 'Desktop';
        Application.CreateForm(TForm1, Form1);
        Application.CreateForm(TForm2, Form2);
        Application.CreateForm(TForm3, Form3);
        Application.CreateForm(TForm4, Form4);
      finally
        Form16.InitializationDone := True;
      end;
      Application.Run;
    end
    else
    begin
      hWindow := FindWindow(nil,'Desktop');
      if hWindow <> 0 then
      begin
        if (paramcount > 0) and FileExists(paramstr(1)) then
        begin
          cdWork.dwData := dwMessage;
          cdWork.cbData := Length(paramstr(1))+1;
          cdWork.lpData := AllocMem(cdWork.cbData);
          try
            CopyMemory(cdWork.lpData,@paramstr(1)[1],cdWork.cbData-1);
            SendMessage(hWindow,WM_COPYDATA,0,lParam(@cdWork));
          finally
            FreeMem(cdWork.lpData,cdWork.cbData);
          end;
        end;
      end;
    end;
    finally
    if dwMutex <> 0 then
    begin
      CloseHandle(dwMutex);
    end;
  end;
end.
(habe noch einen splash screen eingebaut)

und der code in meiner main unit sieht wie folgt aus:

Delphi-Quellcode:
procedure TForm1.WndProc(var msg : TMessage);
var
  cdWork : PcsCopyDataStruct;
  sec, min: Integer;
  s1, s2, result: String;
begin
  if msg.Msg = WM_COPYDATA then
  begin
    cdWork := PcsCopyDataStruct(msg.lParam);
    if cdWork.dwData = dwMessage then
    begin
      ListBox2.Items.Add(PChar(cdWork.lpData));
      ListBox5.Items.Add(ExtractFileName(PChar(cdWork.lpData)));
      ListBox7.Items.Add(IntToStr(Form1.ListBox5.Count));
      if MPEGaudio.ReadFromFile(PChar(cdWork.lpData)) then
        if MPEGaudio.Valid then
        begin
          sec := round(MPEGaudio.Duration);
          min := sec div 60;
          sec := (sec - min * 60);
          if min >9 then s1 := intToStr(min)
          else s1 := intToStr(min);
          if sec >9 then s2 := intToStr(sec)
          else s2 := '0' + intToStr(sec);
          result := S1 + ':' + S2;
          ListBox8.Items.Add(''+result+'');
        end;
      Sort(ListBox5, ListBox8, ListBox2);
      HorScrollBar(ListBox5, 68);
      HorScrollBar(ListBox7, 18);
      HorScrollBar(ListBox8, 29);
      ShowScrollBar(ListBox5.Handle, SB_VERT, FALSE);
      ShowScrollBar(ListBox7.Handle, SB_VERT, FALSE);
    end;
  end
  else
  begin
    inherited WndProc(msg);
  end;
end;
fehlermeldungen bringt er keine, aber in die listboxen wird auch nichts eingetragen.

danke für eure hilfe

Flo
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Programm in Kontextmenü eintragen

  Alt 18. Aug 2005, 21:58
Moin Flo,

wenn der Eintrag in der Registry tatsächlich so aussieht, wie Du ihn gepostet hast, dann fehlt ein Blank zwischen den beiden mittleren "

So müsste es gehen:
"D:\Desktop\Desktop.exe" "%1"
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
-=IOI=-

Registriert seit: 5. Mär 2005
54 Beiträge
 
#7

Re: Programm in Kontextmenü eintragen

  Alt 19. Aug 2005, 16:11
hab es in der registry nun umgeändert. leider passiert immer noch nichts. wenn ich den eintrag anklicke, bekommt mein mauszeiger kurzzeitig eine sanduhr, im programm hat sich jedoch nichts verändert.
  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 14:02 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