Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Problem mit Dateiaufruf per paramstr (https://www.delphipraxis.net/7254-problem-mit-dateiaufruf-per-paramstr.html)

negaH 8. Aug 2003 11:05

Re: Problem mit Dateiaufruf per paramstr
 
Zitat:

@Hagen danke erstmal, mal schauen ob du es hinbekommst
Na, das ist doch keine Frage, die Frage ist ob ich 2 Wochen oder 3 Monate benötige :)

Gruß hagen

wb32 8. Aug 2003 14:21

Re: Problem mit Dateiaufruf per paramstr
 
also ich habe folgendes festgestellt:

Code:
procedure TForm1.addClick(Sender: TObject);
begin
 reg:=tregistry.create();
  // Dateien ins Context Menü
  Reg.RootKey:=HKEY_CLASSES_ROOT;
  Reg.OpenKey('*\shell',true);
  Reg.CloseKey;
  Reg.OpenKey('*\shell\'+Name,true);
  Reg.WriteString('',Title);//optional
  Reg.CloseKey;
  Reg.OpenKey('*\shell\'+Name+'\command',true);
  Reg.WriteString('',Adress); // adress="c:\test\meinprogramm.exe %1"
  Reg.CloseKey;
  Reg.OpenKey('*\shell\'+Name+'\ddeexec\',true);
  Reg.WriteString('','[open("%1")]');
  Reg.CloseKey;

   // Ordner ins Context Menü
   Reg.OpenKey('Directory\shell',true);
   Reg.CloseKey;
   Reg.OpenKey('Directory\shell\'+Name,true);
   Reg.WriteString('',Title);//optional
   Reg.CloseKey;
   Reg.OpenKey('Directory\shell\'+Name+'\command',true);
   Reg.WriteString('',Adress);
   Reg.CloseKey;

  reg.free;
  del.enabled:=true;
  add.Enabled:=false;
end;


Dieser Code hier:

Code:
 
Reg.OpenKey('*\shell\'+Name+'\ddeexec\',true);
Reg.WriteString('','[open("%1")]');
Reg.CloseKey;
bewirkt das man multiple dateien auswählen kann, wenn ich mehr als eine Datei wähle funktioniert alles bestens, wenn ich nun aber nur eine wähle kommt eine Messagebox das die mit Rechtsklick gewählte Datei nicht gefunden wurde ????

der pfad zur datei wird aber wie programmiert in meine Listbox eingetragen...

es funktioniert also alles ausser das dann dieser hinweis kommt,
weiß jemand woran das liegt ?

wb32 8. Aug 2003 17:12

Re: Problem mit Dateiaufruf per paramstr
 
hat niemand eine Idee ?

negaH 8. Aug 2003 17:43

Re: Problem mit Dateiaufruf per paramstr
 
ich habe das mal mit dem deexec probiert, das klappt nicht bei mir öffnet er die exe trotzdem mehrmals und bringt zusätzlich nich merhmals eine Fehlermeldung. Natürlich habe ich keine DDE Komponente drauf :)

Gruß hagen

wb32 8. Aug 2003 18:11

Re: Problem mit Dateiaufruf per paramstr
 
man man man das ist doch zum verrückt werden :evil:

es gibt hunderte von programmen die mehr als eine datei mit einem rechtsklick öffnen können das kann doch nich so schwer sein...

zum beispiel beim dateien löschen kann man doch mehr als eine gleichzeitig markeiren und alle löschen...

hab hier mal nen link zum source von eraser einem Delete Tool

Download

der kann mehr als eine markierte datei auf einmal lsöchen vielleicht kann damit jemand was anfangen und da mal reinschauen.. is aber C glaube ich ...

negaH 8. Aug 2003 18:19

Re: Problem mit Dateiaufruf per paramstr
 
Also mit dem DDE ist das ziemlich einfach.
Als erstes in dein Formular eine TDDEServerConv rein, bei dieser den Namen auf "System" un das Event OnexecuteMacro etwa so:

Delphi-Quellcode:
procedure TForm1.SystemExecuteMacro(Sender: TObject; Msg: TStrings);
begin
  ListBox1.Items.AddStrings(Msg);
end;
Nun noch die Registry.

Zitat:


[HKEY_CLASSES_ROOT\.step]
@="stepfile"

[HKEY_CLASSES_ROOT\stepfile]

[HKEY_CLASSES_ROOT\stepfile\shell]
@=""

[HKEY_CLASSES_ROOT\stepfile\shell\open]

[HKEY_CLASSES_ROOT\stepfile\shell\open\command]
@="d:\\borland\\delphi5\\projects\\project11.exe "

[HKEY_CLASSES_ROOT\stepfile\shell\open\ddeexec]
@="%1"

[HKEY_CLASSES_ROOT\stepfile\shell\open\ddeexec\Appl ication]
@="project11"

[HKEY_CLASSES_ROOT\stepfile\shell\open\ddeexec\Topi c]
@="System"

D.h. alle Dateien mit Extension *.step werden durch die Anwendung "d:\borland\delphi5\projects\project11.exe" geöffnet. Dabei wird der TDDEServerConv mit Namen "System" das Makro gesendet das bei "\open\ddeexec" steht. Hier besteht das Makro nur aus dem Dateinamen der zu öffnenden Datei. Das war alles.

Über'n Explorer im Menu\Extras\Ordneroptionen...\Dateitypen kann man dies auch komfortabel editieren.

Ich schätze mal das wars dann :)

Gruß Hagen

wb32 8. Aug 2003 18:26

Re: Problem mit Dateiaufruf per paramstr
 
ich muss dich leider enttäuschen *gg*...

ich will ein programm bauen wie diesen eraser der dateien löscht, dazu ist es wie bereits beschrieben nötig alle möglichen dateiarten *.rtf oder *.doc oder *.txt zu markieren und dieses werte also den pfad der datei auf der platte (den ich ja zum löschen einer datei brauche) an meine exe zu senden...

es nützt mir also nichts wenn ich nur dateien die eine bestimmte endung haben damit öffnen kann ...

sorry :)

wb32 8. Aug 2003 18:53

Re: Problem mit Dateiaufruf per paramstr
 
oder ich trenne das auf in 2 exe dateien ?

den klick auf eine datei lenke ich auf die umleitung.exe die prüft ob die delete.exe schon gestartet ist, wenn nicht wird sie gestartet...

danach sendet die umleitung.exe die daten paramstr an die delete.exe und beendet sich selbst...

dbaei wäre es egal wie oft die umletiung exe gestartet wird da sie eh unsichtbar ist und sich selbst beendet...

ist doch besser so oder ?

wb32 8. Aug 2003 19:42

Re: Problem mit Dateiaufruf per paramstr
 
ok ich hab die DDE Kompos drauf, hab auch schon einbeispiel gefunden dazu


http://www.elsdoerfer.net/delphi/delphitut_dde.html


nur leider funktioniert es bei einem klick nur einmal und das mit der rückmeldung vom server geht nich so wie es da steht...

der text aus dem memo im client wird aber korrekt an den server gesendet...

hat jemand noch ein beispiel oder ähnliches dazu ?

negaH 8. Aug 2003 20:43

Re: Problem mit Dateiaufruf per paramstr
 
Liste der Anhänge anzeigen (Anzahl: 1)
ich verstehe dein Problem nicht. Nun habe ich mal in hKey_Classes_Root den * Eintrag für alle Dateien erweitert

Zitat:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell]

[HKEY_CLASSES_ROOT\*\shell\open]

[HKEY_CLASSES_ROOT\*\shell\open\command]
@="d:\\borland\\delphi5\\projects\\project11.exe "

[HKEY_CLASSES_ROOT\*\shell\open\ddeexec]
@="%1"

[HKEY_CLASSES_ROOT\*\shell\open\ddeexec\application]
@="project11"

[HKEY_CLASSES_ROOT\*\shell\open\ddeexec\topic]
@="System"

Bei mir ruft er es absolut korrekt auf.
Mit nachfolgender Registry habe ich sogar für Verzeichnise einen neuen Eintrag im Contextmenu der "Suchen" heist. Wird er angeklickt so wird korrekterweise der Project11.exe der Verzeichnisname gesendet.

Zitat:


[HKEY_CLASSES_ROOT\Folder\shell\Suchen]

[HKEY_CLASSES_ROOT\Folder\shell\Suchen\command]
@="d:\\borland\\delphi5\\projects\\project11.exe "

[HKEY_CLASSES_ROOT\Folder\shell\Suchen\ddeexec]
@="%1"

[HKEY_CLASSES_ROOT\Folder\shell\Suchen\ddeexec\Appl ication]
@="project11"

Bei mir klappt also alles wie gewünscht.

Gruß Hagen


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:41 Uhr.
Seite 3 von 5     123 45      

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