AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Prog. nur einmal starten.Parameter an erstes Weitergeben?
Thema durchsuchen
Ansicht
Themen-Optionen

Prog. nur einmal starten.Parameter an erstes Weitergeben?

Ein Thema von dadu · begonnen am 17. Mär 2004 · letzter Beitrag vom 27. Jun 2004
Antwort Antwort
Seite 1 von 2  1 2      
dadu

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

Prog. nur einmal starten.Parameter an erstes Weitergeben?

  Alt 17. Mär 2004, 16:39
Hi Leute!

Ich habe einen mp3Player geschrieben. Wenn man mehrere mp3-Dateinen im Windowsexplorer markiert und diese dann durch "Enter"drücken öffnet, sendet Windows nacheinander immer nur 1 Parameter an mein Programm=> Die Playliste wird immer geleert und nur ein Lied wird wieder hinzugefügt, und dass geht dann so bis zu letzten Datei.

Wie kann ich einfach auf alle Parameter reagieren, dass heißt alle markierten mp3-Dateien in die Playliste einfügen und abspielen.

(Winamp und MSMediaplayer können das! Aber wie?)

DaDu
  Mit Zitat antworten Zitat
Benutzerbild von The-X
The-X

Registriert seit: 31. Aug 2003
Ort: Woffelsbach / user.exe ;)
377 Beiträge
 
Delphi 7 Personal
 
#2

Re: Prog. nur einmal starten.Parameter an erstes Weitergeben

  Alt 17. Mär 2004, 16:47
Mit einem Mutex prüfen ob dein programm schon läuft und dann mit Messages? dem ersten Player mitteilen, das noch eine Datei geöffnet werden soll...

OH -> CreateMutex, SendMessage
WGET ftp://root@fbi.us.gov/secret/worldreign.exe <- damit werde ich die Weltherrschaft an mich reissen!
=> irc://irc.quakenet.eu.org:6667/delphi.de da werden Sie auch (manchmal) geholfen
  Mit Zitat antworten Zitat
dadu

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

Re: Prog. nur einmal starten.Parameter an erstes Weitergeben

  Alt 17. Mär 2004, 20:34
Kannst du mir das mal mit CreateMurtex erklären(Was macht das?; wofür ist das da?)
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Prog. nur einmal starten.Parameter an erstes Weitergeben

  Alt 17. Mär 2004, 20:40
Hallo dadu,
interessant ist, dass Deine Frage genau den gleichen Wortlaut hat wie die Lösung in der Library Progamm nur einmal starten und ParameterProgamm nur einmal starten und Parameter
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
dadu

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

Re: Prog. nur einmal starten.Parameter an erstes Weitergeben

  Alt 17. Mär 2004, 20:46
Thx!

Hatte ich nicht gesehen. Probier's gleich mal aus!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Prog. nur einmal starten.Parameter an erstes Weitergeben

  Alt 17. Mär 2004, 20:48
Moin Dadu,

oder guckst Du hier:

Mit Mehreren Datein ein Program Starten
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
dadu

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

Re: Prog. nur einmal starten.Parameter an erstes Weitergeben

  Alt 20. Mär 2004, 16:18
Danke für eure Antworten , jedoch hab ich mich wahrscheinlich nicht verständlich genug ausgedrückt!

Mein Problem ist nicht, nur einen Player zu starten und dann immer eine Message an ihn zu senden!

Mein Problem:

Wenn der Player gestartet ist und man im Windows-Explorer eine mp3(*.mp3 ist mit meinem Player verknüpft) per doppelklick öffnet dann löscht der Player die gesamte Playliste und fügt dann in die leere Liste nur die mp3 ein, die man grade per doppelklick geöffnet hat. (Das soll auch alles so sein!!!)

> Wenn ich aber jetzt im Explorer mehrere mp3s markiere und alle zusammen mit "Enter" gleichzeitig öffne macht mein Player das, was ich oben beschrieben habe. Er leert die Liste, und fügt nur die eine mp3 ein. Da Windows die markierten Dateien hintereinander öffnet wird aus diesem "leeren , einfügen" eine Schleife, wobei sich immer nur ein Lied in der Playliste befindet.
Nur die von Windows zuletzt geöffnete Datei wird in der Playliste sein und abgespielt werden!

Das ist mein Problem; wenn man mehrere mp3-Dateien markiert hat und diese gleichzeitig öffnet, soll die Playliste geleert werden und alle markierten Dateien sollen in die Liste eingefügt werden.

Irgendwelche Vorschläge?

PS: Timer ist wohl nicht so gut, da die Ladezeit der Dateien bei unterschiedlichen Rechnern variiert! Vielleicht eine Message?! WindowsMediaPlayer und Winamp haben das Problem irgendwie gelöst.

DaDu
  Mit Zitat antworten Zitat
Benutzerbild von atreju2oo0
atreju2oo0

Registriert seit: 5. Dez 2003
Ort: Berlin
289 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: Prog. nur einmal starten.Parameter an erstes Weitergeben

  Alt 20. Mär 2004, 17:05
Ich stehe gerade vor dem selben Problem...
Wenn ich mehrere Dateien markiere und öffne dann ist in Paramstr(1) nur eine Datei.
An die restlichen Dateien komm ich nicht ran!
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Prog. nur einmal starten.Parameter an erstes Weitergeben

  Alt 20. Mär 2004, 17:18
Woher soll auch Windows wissen, dass ihr keine neue Instanz wollt? Schickt mit WM_COPYDATA die Paremter der zweiten Instanz an die erste und beendet die zweite. Aber warum erzähle ich das eigentlich alles? Steht dich genmauso in dem Code-Lib Eintrag. Ich muüüst nur mal auf die Links klicken, die man euch gibt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#10

Re: Prog. nur einmal starten.Parameter an erstes Weitergeben

  Alt 20. Mär 2004, 17:19
Hallo!

Ich habe das einmal so gelöst. Ist zwar nicht schön, funktioniert aber:

In der Projektdatei:
Delphi-Quellcode:
var
  Semaphore: THandle;
  theFiles : String;
  i : Integer;
  MyCopyDataStruct: TCopyDataStruct;
begin
  ActivationMessage := RegisterWindowMessage(PChar(MyGUID));
  Semaphore := CreateSemaphore(nil, 1, 1, PChar(MyGUID));

  if (GetLastError = ERROR_ALREADY_EXISTS) then
  begin
    PostMessage(HWND_BROADCAST, Mainform.ActivationMessage, 0, 0);

    if ParamCount > 0 then
    begin
      theFiles := '';

      for i:=1 to ParamCount do
      begin
        theFiles := theFiles + ParamStr(i);
        if i < ParamCount then theFiles := theFiles + '|';
      end;

      with MyCopyDataStruct do
      begin
        dwData := 0;
        cbData := StrLen(PChar(theFiles));
        lpData := PChar(theFiles);
      end;

      SendMessage(HWND_BROADCAST, WM_COPYDATA, LongInt(Application.Handle), Longint(@MyCopyDataStruct));
    end;
  end
  else
    {Mache das, was Du auch sonst hier treibst.}
Und in der Hauptform:
Delphi-Quellcode:
private
  {...}
  procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;

{...}

procedure Tfrm_main.WMCopyData(var Msg: TWMCopyData);
var sText: Array of Char;
    fad, theFiles : TStringList;
    i,k : Integer;
    temp : String;
begin
  SetLength(sText, Msg.CopyDataStruct.cbData);

  StrLCopy(@sText[0], Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData);


  theFiles := TStringList.Create;
  fad := TStringList.Create;
  try
    temp := '';

    k := 0;
    fad.Add('');
    for i:=0 to High(sText) do
    begin
      if (sText[i] = '|') and (i < High(sText)) then
      begin
        fad.Add('');
        inc(k);
      end else
          fad[k] := fad[k] + sText[i];
    end;


    for i:=0 to fad.Count - 1 do
    begin
      if FileGetAttr(fad[i]) and faDirectory <> 0 then
        addFilesFromFolder(fad[i])
      else
        theFiles.Add(fad[i]);
    end;

    addFiles(theFiles);
  finally
    theFiles.Free;
    fad.Free;
  end;
end;
Damit wird folgendes gemacht:
Die Parameter werden in der Projektdatei erst einmal alle mit '|' getrennt, weil das in Dateinamen nicht vorkommen kann. Dann werden alle komplett an das laufende Programm gesendet.
Dieses nimmt die wieder auseinandern und speichert die einzelnen Paraemter wieder in der StringList fad ("files and directories"). Die Liste wird durchgegangen und je nachdem, ob es sich um ein Verzeichnis oder nur um eine Datei handelt, wird was anderes gemacht. Letzteres braucht Ihr wahrscheinlich nicht, aber es ist halt aus meinen Programm rauskopiert.

MfG
Peter
Christian S.
Admin in der Entwickler-Ecke
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:14 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