![]() |
Parameter SCHNELL an Hauptprog weiterleiten
Hallo Community,
ich habe mir einen player geschrieben, der aufgerufene mp3s per sendmessage und wm_copydata empfängt. danach schließen sich die weiteren programme, welche dadurch geöffnet wurden durch zB "halt" oder "application.terminate", sodass schließlich nur wieder mein hauptprogramm läuft. komme ich nun zu meinem problem: wenn ich viele mp3s im explorer markiere und diese hinzufügen möchte, fragt mich windows erst einmal, ob ich diesen vorgang ausführen möchte, da er möglicherweise zu einer hohen auslastung führen könnte (hab ja zB mind. 40 dateien gleichzeitig geöffnet). drücke dann immer auf ok und meinem player werden die dateien hinzugefügt. allerdings brauch dieser vorgang relativ lange (was bei zB winamp nicht der fall ist, wenn man viele dateien gleichzeitig hinzufügen möchte). durch das ständige öffnen, senden und schließen pro parameterübergabe ändert sich auch ständig der cursor (pfeil, sanduhr, pfeil usw.) bis alle dateien hinzugefügt wurden. kann ich diesen prozess beschleunigen? cya |
Re: Parameter SCHNELL an Hauptprog weiterleiten
Moin Nogge,
an welcher Stelle prüfst Du denn, ob schon eine Instanz Deines Programmes läuft? |
Re: Parameter SCHNELL an Hauptprog weiterleiten
Schau dir mal die Komponenten TDDeSeverConv und TDDeServerItem an, damit geht das sehr schön und ohne ein Programm aufzurufen!
![]() |
Re: Parameter SCHNELL an Hauptprog weiterleiten
DDE wäre dafür die schlechteste Idee.
Zum einen ist es eine veraltete Technik, die man (ich) auch nur noch aus Kompatibilitätsgründen zu anderen Programmen benötigt. DDE gibt es unter .NET schon gar nicht mehr. Zudem wird der Nachrichten Austausch in DDE durch TEXT STRINGS !! realisiert. Mit Schnelligkeit hat das nix zu tun .. Guck Dir da eher mal die Socketkomponenten an, wenn Du Daten austauschen möchtest. TCP/IP |
Re: Parameter SCHNELL an Hauptprog weiterleiten
das ganze dauert soo lange weil du vermutlich erst im OnCreate des Haupformulars prüfst ob dein Programm schon offen ist. Wenn du das ganze schon in der Projektdatei prüfst bevor irgend eine Instanz eines Forms erzeugt wurde geht das ganze wesentlich schneller (und so machts winamp auch, da werden nicht erst alle module geladen wenn am ende das prog doch abgeschossen wird). Also einfach bevor irgendwas in der Projectdatei ausgeführt wird prüfen ob das prog schon läuft und dann gleich von der stelle aus die parameter weiterreichen
|
Re: Parameter SCHNELL an Hauptprog weiterleiten
@stoxx ich weiß nicht, ob wir gerade aneinander vorbeireden...TCP/IP hat mit meinem problem glaube ich mal nichts zu tun. ich möchte ja nichts über ein netzwerk austauschen, sondern lediglich meine mp3s in meine playlist hinzufügen. wenn es trotzdem damit gehen soll, kannste ja vllt mal ein beispiel-sourcecode oder einen link posten.
ich prüfe bereits in der projektdatei, ob mein hauptprogramm läuft und gebe dort auch die parameter weiter, d.h. NICHT in OnCreate ;-) die form wird bei einer parameterübergabe gar nicht erst erstellt. |
Re: Parameter SCHNELL an Hauptprog weiterleiten
Moin Nogge,
dann ist es wohl ganz sinnvoll mal den Abschnitt zu posten. |
Re: Parameter SCHNELL an Hauptprog weiterleiten
hi Nogge,
kann dem stoxx da nur zustimmen. Habe mit DDE nur die Erfahrungen "langsam & unzuverlässig" gemacht. TCP/IP kannst du sehr wohl auch ohne Netzwerk nutzen. Damit kannst mit Sockets wunderbar Daten zwischen Programmen auf 1 Rechner austauschen. Mußt aber dran denken, daß TCP/IP überhaupt installiert ist, was hier und da mal net sein muß. :???: Roderich |
Re: Parameter SCHNELL an Hauptprog weiterleiten
Hi Nogge,
TCP/IP geht natürlich, wie Roderich sagte, auch auf ein und demselben Rechner. Es gibt aber auch noch eine dritte Möglichkeit, über MMF .. Man nimmt dazu ein von zwei Programmen gleichzeitig genutzten Speicherbereich. Ein Beispiel dafür, hatte ich schonmal vor langer Zeit hier ins Board gestellt .. siehe hier. ( 6 letzter Beitrag von unten) ![]() viele Grüße stoxx |
Re: Parameter SCHNELL an Hauptprog weiterleiten
da C.Seehase meinen sourcecode mal sehen wollte, hier:
Delphi-Quellcode:
var MainApp:HWND; MyCopyDataStruct:TCopyDataStruct;
begin if FindWindow(nil,Main_ID)<>0 then begin MainApp:=FindWindow(nil,Main_ID); if ParamCount>0 then begin with MyCopyDataStruct do begin dwData:=MY_SENTPARAM; cbData:=Length(PChar(ParamStr(1)))+1; lpData:=PChar(ParamStr(1)); end; end else begin with MyCopyDataStruct do begin dwData:=MY_SHOWAPP; cbData:=0; lpData:=nil; end; end; SendMessage(MainApp,WM_COPYDATA,0,Longint(@MyCopyDataStruct)); //Application.Terminate; end else begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz