Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Parameter SCHNELL an Hauptprog weiterleiten (https://www.delphipraxis.net/35710-parameter-schnell-hauptprog-weiterleiten.html)

Nogge 10. Dez 2004 23:12


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

Christian Seehase 10. Dez 2004 23:29

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
Moin Nogge,

an welcher Stelle prüfst Du denn, ob schon eine Instanz Deines Programmes läuft?

moritz 10. Dez 2004 23:39

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!
http://www.delphihowtos.de/howto/howto3.html

stoxx 11. Dez 2004 01:38

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

SirThornberry 11. Dez 2004 08:11

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

Nogge 11. Dez 2004 09:56

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.

Christian Seehase 11. Dez 2004 13:26

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
Moin Nogge,

dann ist es wohl ganz sinnvoll mal den Abschnitt zu posten.

roderich 11. Dez 2004 13:36

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

stoxx 11. Dez 2004 14:19

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)


http://www.delphipraxis.net/internal...ighlight=daten

viele Grüße
stoxx

Nogge 11. Dez 2004 17:18

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;

MedanoCC 12. Dez 2004 13:03

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
Ich bin mir da nicht hundertpro sicher, aber ich bezweifle, dass der Explorer, wenn mehrere Dateien markiert sind, nicht die Möglichkeit besitzt, diese nicht einzeln sondern als "Paket" an ein Programm zu übergeben, sprich so eine Art "Filelist" zu übergeben.

Solltest Dich mal in der MSDN umschauen. Bei 100 einzelnen Files wäre das in der Tat immer extrem langsam. Wie macht das WinAmp oder der Realplayer bzw. der Mediaplayer? Dort gibts doch den Eintrag im Explorer "Zur Wiedergabeliste hinzufügen". Welche Werte werden hier in der Registry gesetzt?

nailor 12. Dez 2004 13:07

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
Zitat:

Zitat von MedanoCC
Ich bin mir da nicht hundertpro sicher, aber ich bezweifle, dass der Explorer, wenn mehrere Dateien markiert sind, nicht die Möglichkeit besitzt, diese nicht einzeln sondern als "Paket" an ein Programm zu übergeben, sprich so eine Art "Filelist" zu übergeben.

das ist normal so, dass die dateinamen in ParamStr(1) bis ParamStr(ParamCount) ankommen.

fkerber 12. Dez 2004 13:08

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
Hi!

Bei Winamp steht in beiden Fällen nur ein %1 dahinter. Allerdings wird beim hinzufügen zur Liste noch ein anderer Parameter übergeben (aber kein Platzhalter sondern /ADD)


Ciao Frederic

Nogge 12. Dez 2004 13:23

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
ich war mal auf der MSDN seite, aber das ist mir alles viel zu unübersichtlich. ich habe keine ahnung, unter welcher kategorie ich dort suchen muss ;_;
kann mir hier niemand z.B. nen beispiel sourcecode posten oder einen direkten link geben? wenn das mit solch einem paket wirklich geht, dann wäre das wohl DIE lösung, nur wie soll das funktionieren?^^
btw. bitte postet keine neuen fragen, sondern eröffnet selber nen thread. Erklärungen für ParamStr(0) bzw. ParamStr(1) sowie ParamCount findet ihr alle in Delphi-Praxis-Forum.

stoxx 12. Dez 2004 15:42

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
sorry Nogge, hab wahrscheinlich Deine Frage zu ungenau gelesen, dachte es ging um DDE oder Datenübertragung, Du willst ja mit dem Explorer kommunizieren .. :coder2:

Luckie 12. Dez 2004 22:40

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
Mal eine andere Frage: Werden die dateien nur in einer Liste hinzugef+gt oder machst du noch was anderes mit denen (ID3 Tags auslesen, ...)?

Ansonsten probier mal: oneinst von Nico http://www.luckie-online.de/Delphi/Importe/Nico/

Nogge 13. Dez 2004 13:36

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
hab mir das project mal angesehen, jedoch funktioniert die exe nicht so, wie ich möchte (s. erläuterung) und zweitens verstehe ich die .pas nicht so wirklich...
erläuterung:
als ich z.B. 40 mp3s markiert hatte und diese mit der project1.exe von OneInst öffnen wollte, wurde nur EINE mp3 hinzugefügt...ich möchte ja alle markierten dateinamen in meine liste habe und das schneller, als bisher (z.B. wie bei winamp). vllt kann man ja mehrere dateinamen mit dieser variante (OneInst) hinzufügen, nur fehlt mir dafür das nötige wissen ;_;
um deine frage zu beantworten: ja, ich möchte natürlich auch id3 tags usw. auslesen.

jim_raynor 13. Dez 2004 13:46

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
So wie ich dich verstanden habe zu du jetzt die MP3 Dateien auf eine Exe? Wenn ja, wird für jede Datei ne neue Instanz gestartet. Dein Programm würde also 40 mal gestartet dann jeweils eine Nachricht abgeschickt. Das dauert natürlich. Winamp löst es doch anders, wenn ich mich Recht erinnere. Dort werden die Dateien doch direkt auf das Fenster der Anwendung gezogen, oder?

DragAcceptFiles sollte deine Lösung sein. Dann können die Dateien auch direkt in die Anwendung gezogen werden. Also Beispiel habe ich das hier gefunden:

http://www.chami.com/tips/delphi/111196D.html

Ob es funktioniert, keine Ahnung. Aber der Ansatz sollte hoffentlich klar werden.

Nogge 13. Dez 2004 14:11

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
jim_raynor, du verstehst mich ;-) du hast exakt mein problem beschrieben. es dauert mir einfach zu lange bis meine wie im beispiel 40 instanzen geöffnet und wieder geschlossen werden. der ansatz ist klar und wirklich gut, nur weiß ich nicht, wie ich das umsetzen kann. bei windows macht das die maus ja ganz simpel, ohne man das selbst etwas machen muss (außer "procedure DragAcceptFiles( var msg : TMessage ); message WM_DROPFILES;"). das empfangen ist einfach mit dieser procedure, nur muss ich jetzt ja irgendwie senden können (was die maus automatisch macht).

jim_raynor 13. Dez 2004 15:15

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
Das mit DragAccecptFiles musst du in deine laufende Anwendung einbauen. Ein Extra-Programm brauchst du nicht mehr. In der Prozedur in der die WM_DROPFILES Messages (in dem Beispiel AcceptFiles) abgefangen wird, wird dann einfach, statt der Ausgabe mit MessageBox die Dateien deiner Liste hinzugefügt.

Du darfst also nicht mehr die Dateien auf die Exe ziehen, sondern musst diese direkt auf das Formular der Anwendung ziehen.

Wie man das Drag'n'Drop auf die Exe beschleunigen kann, weiss ich leider nicht. Auch hat dieses DragAcceptFiles nichts damit zu tuen. Aber zumindestens kannst du dann die Dateien in die laufende Anwendung ziehen.

Nogge 13. Dez 2004 16:52

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
ich will doch gar nicht die dateien auf mein fomular ZIEHEN, sondern per RECHTSKLICK: (z.B. mit dem eintrag) "add to player" in meine liste hinzufügen.
Zitat:

In der Prozedur in der die WM_DROPFILES Messages (in dem Beispiel AcceptFiles) abgefangen wird, wird dann einfach, statt der Ausgabe mit MessageBox die Dateien deiner Liste hinzugefügt.
mir ist schon klar, wie ich mit abgefangegene messages umgehen kann ;-)

mumu 13. Dez 2004 17:25

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
poste mal die funktion die aufgerufen wird, wenn der parameter wm_copydata message in deinem Programm ankommt. ggfs liest du hier schon mp3 tag usw... aus, dann kann es nämlich sein, dass es deswegen so lange dauert, bis alle dateien in deinem player erscheinen.

Nogge 13. Dez 2004 18:14

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
drück ich mich sooo undeutlich aus? jeder, der mein problem nicht versteht, sollte mal selber schnell ne COPYDATA procedure bzw. programm erstellen und mehrere dateien gleichzeitig öffnen. dabei werden dann so viele instanzen meines programms geöffnet und wieder geschlossen wie ich an dateien so geöffnet habe. selbst wenn ich meine parameter vor dem erstellen der form an die hauptinstanz sende und die instanz gleich wieder schließe, dauert es sehr lange, bis alle instanzen geschlossen werden. bei 2 oder 3 dateien bemerkt man die verzögerung auch nicht, aber bei 30,40,50,100 usw. dateien gleichzeitig dauert es eine ganze weile.
@jim_raynor noch mal: ich habe schon lange ne procedure für "drag&drop vom explorer in meine playlist" in meinem programm integriert. möchte jetzt aber noch (wie ich dauernd erwähne) eine andere möglichkeit bzw. ne schnellere möglichkeit sehr viele dateinamenpfade in eine liste zu senden. vllt versteh ich dich jetzt ja nur falsch...

Nogge 14. Dez 2004 18:56

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
es hat zwar nichts damit zu tun, aber ok...hier mein source code fürs empfangen (so wird diese Thread wenigstens in der übersicht wieder nach oben geschoben^^):
Delphi-Quellcode:
procedure TForm1.WMCopyData(var Msg: TWMCopyData);
var sText: Array of Char; Item: String; ForegroundThreadID,ThisThreadID:Cardinal;
begin
case Msg.CopyDataStruct.dwData of
  MY_SENTPARAM: begin                      
    SetLength(sText,Msg.CopyDataStruct.cbData);
    StrLCopy(PChar(sText),Msg.CopyDataStruct.lpData,Msg.CopyDataStruct.cbData);
    Item:=PChar(sText);
    Listbox1.Items.Add(Item);
  MY_SHOWAPP: begin
    ForegroundThreadID:=GetWindowThreadProcessID(GetForegroundWindow);
    ThisThreadID:=GetWindowThreadProcessId(Handle);
    if AttachThreadInput(ThisThreadID,ForegroundThreadID,True) then begin
    BringWindowToTop(Handle);
    SetForegroundWindow(Handle);
    AttachThreadInput(ThisThreadID,ForegroundThreadID,False);
    end; end;
end;
ist mein problem wirklich so schwer zu lösen oder möchte mir hier einfach niemand ne lösung schreiben?^^

jim_raynor 14. Dez 2004 19:27

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
Ich habs jetzt nochmal getestet. Also mehrere Dateien markiert und auf eine Exe gezogen. Hat wunderbar nur das prog nur einmal gestartet.

Wenn ich die Dateien markiere und über das Kontextmenü dann an Winamp schicke wird auch bei Winamp für jede Datei eine Anwendung geöffnet. Ich glaube einfach, dafür gibt es keine Lösung.

dadu 14. Dez 2004 19:54

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
Muss es aber doch!
Die "profi"-Player können das ja auch! Wenn ich mehrere mp3-Dateien im Windows-Explorer markiert habe und ENTER drücke sind die sofort in der Playliste!
Kann es vielleicht sein, dass Windows beim öffnen einer Datei eine Message rausschickt(zb: wm_beforeopen(filename)), die Winamp abfängt, prüft ob die Datei mit Winamp abgespielt werden soll und den "Windows-öffnen-Vorgang" abbricht??? Würde die Geschwindigkeit erklären.

DaDu

jim_raynor 14. Dez 2004 19:58

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
Okay, hast Recht. Was ich jetzt rausgefunden, wenn du in den Dialog zum Bearbeiten der Dateitypen offen hast, kannst du eine Option DDE aktivieren benutzen. Dann funktioniert das allerdings. Allerdings frag mich nicht wie das Programm aussehen muss, damit es soetwas unterstützt. Das ne Windows-message gesendet wird bezweifel ich stark, da er ja garnicht weiss an welches Prog und wenn doch könnte man so schöne Viren und Trojaner basteln ;)

Nogge 14. Dez 2004 21:26

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
also ist es mit dem wissen der Community aus Delphi-Praxis nicht möglich, meinen willen zu realisieren? verstehe deine sätze nicht immer so genau, da du sie nicht wirklich komplett ausschreibst, jim_raynor^^ genauere tipps bzw. irgendwelche kleinen hilfen kann mir niemand geben? ;_;

jim_raynor 14. Dez 2004 21:34

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
Versuchen wir es noch mal auf Deutsch und etwas umfangreicher. :oops:

Im Explorer unter Extras->Ordneroptionen bekommst du ja eine Übersicht mit den Dateitypen. Wenn du dann deinen entsprechenden Dateityp auswählst und dann auf erweitert gehst, kannst du ja die Aktionen bearbeiten, die zu diesem Dateitypen im Kontextmenü angezeigt werden. Wenn du dann eine Aktion bearbeitest, kannst du die Option "DDE verwenden" aktivieren. (am besten du schaust dir das mal bei MP3 an).

Ist "DDE verwenden" aktiviert, kommt diese Meldung ("Das gleichzeitige öffnen ...") nicht mehr. Allerdings weiss ich nicht, wie dein Programm aussehen muss, um die Daten richtig zu verarbeiten.

Nogge 15. Dez 2004 09:43

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
ich habe jetzt herausgefunden, dass man mit IICONTEXTMENU die markierten dateien im explorer ermitteln kann. da das aber unbekanntest gebiet für mich ist, bräuchte ich einen link für nen tutorial bzw. jemand erklärt mir, wie ich mein problem mit dieser neuen erkenntnis lösen kann.
wenn ich nämlich mit nur einer neuen (2.) instanz alle dateinamen auf einmal an meine hauptinstanz schicken kann, muss sich nur die neue (2.) instanz schließen und das geht so schnell, dass man es nicht mehr bemerkt.

Nogge 21. Dez 2004 12:09

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
ich habe hier mal etwas gefunden, was bestimmt das ist, was ich brauche. allerdings bin ich beim erstellen eines IDataObjectshängen geblieben ;_; kann mir jemand helfen?

Delphi-Quellcode:
function TDFKontextMenuShellExt.SEInitialize(pidlFolder: PItemIDList;
  lpdobj: IDataObject; hKeyProgID: HKEY): HResult;
var
  StgMedium: TStgMedium;
  FormatEtc: TFormatEtc;
  Idx: Integer;
begin
  if (lpdobj = nil) then
  begin
    Result := E_INVALIDARG;
    Exit;
  end;

  with FormatEtc do
  begin
    cfFormat := CF_HDROP;
    ptd     := nil;
    dwAspect := DVASPECT_CONTENT;
    lindex  := -1;
    tymed   := TYMED_HGLOBAL;
  end;

  Result := lpdobj.GetData(FormatEtc, StgMedium);
  if Failed(Result) then
    Exit;

  // alle ausgew�hlten Dateien ermitteln
  for Idx := 0 to DragQueryFile(StgMedium.hGlobal, $FFFFFFFF, nil, 0) - 1 do
  begin
    DragQueryFile(StgMedium.hGlobal, Idx, FFileName, SizeOf(FFileName));
    // hier k�nnen die Dateinamen eingesammelt werden, z. B.
    // StringListe.Add(FFileName);
  end;

  ReleaseStgMedium(StgMedium);
  Result := NOERROR;
end;

Tempel 21. Dez 2004 16:23

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
Zitat:

Zitat von Nogge
also ist es mit dem wissen der Community aus Delphi-Praxis nicht möglich, meinen willen zu realisieren? verstehe deine sätze nicht immer so genau, da du sie nicht wirklich komplett ausschreibst, jim_raynor^^ genauere tipps bzw. irgendwelche kleinen hilfen kann mir niemand geben? ;_;

Die zweite Antwort (von moritz bzgl DDE Tutorial) auf deine Frage gibt doch eine Detaillierte Anleitung. Auch wenn andere es hier als Veraltet abtun (und zum schluß wieder auf DDE kommen).

Thomas

Nogge 21. Dez 2004 23:11

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
so, ich habe jetzt mal in mein programm die DDE Komponenten eingebaut, aber ich erhalte jedesmal die Fehlermeldung: "Die Datei Filename.ext konnte nicht gefunden werden". Dabei ist es total egal, welche Datei ich öffne. Hab mir natürlich das Tut durchgelesen und fürn Anfang alles übernommen. Doch selbst in dem Tut gibt es mind. einen Fehler:

Zitat:

// Hier die Parameter zum Öffnen eintragen
regist.OpenKey(ext+'file\shell\Programmname\comman d', True);
// Paramstr(0) enthält Pfad- und Dateinamen unserer Applikation,
// %1 ist der als Parameter übergebene Dateiname
regist.WriteString('', Paramstr(0)+' %1');
regist.CloseKey;
ParamStr(0) enthält NUR den Dateipfad und nicht noch den Dateinamen! Richtig wäre ParamStr(0)+'Name.ext'. Daher zweifel ich jetzt auch nach mehreren Fehlversuchen an der Glaubwürdigkeit des gesamten Tuts. Kann mir nicht jemand sein eigenes Beispiel dafür posten?

Christian Seehase 21. Dez 2004 23:55

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
Moin Nogge,

Zitat:

Zitat von Nogge
ParamStr(0) enthält NUR den Dateipfad und nicht noch den Dateinamen!

:shock:

Wie hast Du denn das hinbekommen.

Also bei mir enthält paramstr(0) den gesamten Pfad meiner Anwendung inclusive des Dateinamens.

Nicht richtig falsch (;-)) aber unsauber:
Delphi-Quellcode:
regist.WriteString('', Paramstr(0)+' %1');
besser:
Code:
regist.WriteString('',[color=red][b]'"'+[/b][/color] Paramstr(0)+'[color=red][b]"[/b][/color] [color=red][b]"[/b][/color]%1[color=red][b]"[/b][/color]');
Ansonsten bekommt man ein Problem, wenn entweder das Programm, oder aber der Übergebene Parameter ein oder mehrere Leerzeichen enthalten.
Falls es nicht deutlich zu lesen ist: Der Programmpfad und der Parameter werden jeweils in doppelte Anführungsstriche eingefasst.

Nogge 22. Dez 2004 10:36

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
:oops: peinlich :oops:
Ich habe bisher nur ParamStr(0) in Verbindung mit ExtractFilePath benutzt und irgendwie beim Lesen diesen Teil einfach hinzugefügt, obwohl es im Tut nicht steht => Gewohnheit^^

Die Anführungsstriche habe ich sowieso schon in meinen Code hinzugefügt, jedoch bleibt das alte Problem. Ich habe nun herausgefunden, dass die Fehermeldung nur erscheint, wenn ich EINE Datei mit meinem Prog aufrufe. Wenn ich mehr als eine Datei öffne, startet mein Prog ohne Fehlermeldung. Selbst nachdem ich die Komponenten + Uses aus dem Quellcode entfernt hatte, blieb dieses eigenartige Verhalten. Erst nach dem Entfernen des Keys "..\ddeexec" aus der Registry, verschwand jegliche Fehlermeldung beim Start.

Hoffe, dass euch diese Beschreibung für eine Lösung hilft.

Nogge 26. Dez 2004 11:27

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
Frohe Weihnachten Community^^
Tja, nun hab ich wieder Zeit, mich meinem Problem zu widmen und ihr hfftl auch ;-) Mein Problem mit den DDE Koponenten bestehen weiterhin. Kann aber auch sehr schnell Neues lernen, d.h. könnte mir nicht irgendjemand die ganz oben aufgeführte Methode erklären? Hab noch nirgends einen Ansatz an Hilfe in Form von Kommentaren bzw. Tutorials hier im Forum gefunden. Ist das wirklich soo schwer???
Naja, wäre sonst auch mit den DDE Kopmponenten zufrieden, wenn diese mehrere Dateien gleichzeitig und somit schnell weiterleiten können.

Nogge 31. Dez 2004 00:09

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
So, ich habe jetzt mal die DDE Komponenten richtig in mein Programm implementieren können, jedoch hat die Methode immer noch nicht die gewünschte Geschwindigkeit. Außerdem ist das Programm während der Übertragung der Dateinamen ständig im Vordergrund und es erscheint immer noch eine Warnung, dass der Computer vllt nicht mehr reagieren könne, wenn ich so viele Dateien gleichzeitig öffne. Deshalb bin ich ebenfalls der Meinung, dass die Methode veraltet und somit zu langsam ist. Ich brauche daher nun wirklich mal einen netten Helfer bzw. Lehrer, welcher mir bei der letzten und somit hoffentlich schnellen Methode helfen kann.

Zitat:

Es gibt 3 Wege wie man unter Windows eine Anwendung programieren muß damit sie aus der Shell auf multiple Dateien reagieren kann.

1.) Interprozesskommunikation: dabei überträgt eine eventuelle 2. Instance der eigenen Anwendung seinen ParamStr an die schon 1. laufende Instance der selben Anwendung. Danch terminiert die 2. Instance.

2.) Die Anwendung richtet einen DDE Server ein, registriert diesen bei der Shell über die Registry und empfängt dann nacheinander von der Shell die ausgewählten Dateien und Ordner

3.) Es wird eine DLL benutzt die sich als Shell Extension über die Registry veröffentlicht. Dieser Weg geht über COM Interfaces. Die ShellExt implementiert einen IContextMenu Handler der dann bei registrierten Dateitypen als neuer Menueintrag im PopupMenu des Explorers sichtbar wird.
(Ich habe diesen Teil in einem Thread aus dem Delphi-Praxis Forum gefunden.)
Da ich nun Variante 1 und 2 ausprobiert habe und diese nicht die erwünschte Leistung gebracht haben, hoffe ich auf die letze Chance.

stoxx 31. Dez 2004 12:01

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
Zitat:

Ich brauche daher nun wirklich mal einen netten Helfer bzw. Lehrer

Boah !! .. und ansonsten kommst Du gut klar mit Deinen Mitmenschen ? :?:

Nogge 31. Dez 2004 12:12

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
tolle Antwort o_O
Das "wirklich" war auf den Helfer bzw. Lehrer bezogen, da mir hier noch niemand richtig weiterhelfen konnte. Außerdem wollen wir hier doch jetzt nicht wirklich eine Beziehung mit Liebe und Hass aufbauen, oder? ;-))
Also kannste mir auch nicht weiterhelfen, stoxx? ...schade

starY 2. Mär 2005 14:39

Re: Parameter SCHNELL an Hauptprog weiterleiten
 
das gleich Problem habe ich auch :-( weiß denn keiner eine Lösung?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:32 Uhr.
Seite 1 von 2  1 2      

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