| Autor |
Beitrag |
mtin
      
Beiträge: 177
Win XP SP2
BDS2006 Enterprise
|
Verfasst: Di 23.08.05 22:55
auch wenn das eher was allgemeines ist...
ich würde gerne ein Programm schreiben, welches über einen Kontextmenü-eintrag geöffnet wird.
sozusagen Rechtsklick auf eine Datei --> Eintrag auswählen --> Programm startet, Pfad+Dateiname wird irgendwie an das Programm übergeben...
hab sowas noch nie gemacht, also wäre sehr dankbar wenn mir jemand nen paar kleine hilfestellungen geben könnte 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 24.08.05 00:26
Wurde hier im Forum schon oft genug besprochen. Benutz die Suche.
|
|
mtin 
      
Beiträge: 177
Win XP SP2
BDS2006 Enterprise
|
Verfasst: Mi 24.08.05 00:53
hm, hab jetzt 3 posts gefunden wo gefragt wurde un immer nur auf das Beispiel contmenu in ShellExt verwiesen wurde, allerdings seh ich da (wie die anderen 3) nich durch, was ich überhaupt mit der dll machen soll....
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 24.08.05 03:40
Luckie meinte vermutlich was anderes: nämlich "DATEITYP REGISTRIEREN". Das heißt, du erzeugst für dein Programm einen Eintrag im entsprechenden Dateityp. Und über diesen Eintrag startet dann dein Programm. Du findest hier auch eine passende Unit, mit der du diese Einträge von deinem Programm aus setzen lassen kannst (Admin-Rechte unter NT/2000/XP vorausgesetzt).
|
|
mtin 
      
Beiträge: 177
Win XP SP2
BDS2006 Enterprise
|
Verfasst: Mi 24.08.05 11:08
hmm, das ist aber glaubich nicht was ich meinte!
ihr kennt doch sicher alle WinRAR, jede beliebige datei hat bei mir (seit der winrar installation) solche kontextmenü-einträge, z.b. "extract here" oder "add to archive"...
solch einen Eintrag würde ich gerne für mein Programm erzeugen, un wenn dieser angeklickt wird sollte eben mein programm starten und der pfad bzw. dateiname der datei an das programm übergeben werden...
ich hoffe mal ich nerv euch nich 
|
|
Sprint
      
Beiträge: 849
|
Verfasst: Mi 24.08.05 11:17
Beispiele dafür findest du in dem Verzeichnis "<DelphiInstallPath>\Demos\Activex\Shellext".
_________________ Ciao, Sprint.
|
|
mtin 
      
Beiträge: 177
Win XP SP2
BDS2006 Enterprise
|
Verfasst: Mi 24.08.05 11:22
mtin hat folgendes geschrieben: | | hm, hab jetzt 3 posts gefunden wo gefragt wurde un immer nur auf das Beispiel contmenu in ShellExt verwiesen wurde, allerdings seh ich da (wie die anderen 3) nich durch, was ich überhaupt mit der dll machen soll.... |

|
|
Martin1966
      
Beiträge: 1068
Win 2000, Win XP
Delphi 7, Delphi 2005
|
Verfasst: Mi 24.08.05 11:43
mtin hat folgendes geschrieben: | | allerdings seh ich da (wie die anderen 3) nich durch, was ich überhaupt mit der dll machen soll.... |
Ich glaube die muss irgendwo registriert werden. Wenn mich nicht alles täuscht in der Registry: .txt\shellex\ContextMenuHandlers\...
Kannst ja mal bei Google suchen. Hier im Forum habe ich dieses Posting gefunden:
www.delphi-forum.de/...ic.php?p=60656#60656
Lg Martin
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 24.08.05 12:17
mtin hat folgendes geschrieben: | | hmm, das ist aber glaubich nicht was ich meinte! |
Brauchst du unbedingt Grafiken im Kontextmenü? Wenn Nein, und wenn dein Programm nicht gerade eine Shell-Erweiterung erstellen muss, dann reicht der von mir gezeigte Weg vollkommen aus.
| Zitat: | | hab jetzt 3 posts gefunden wo gefragt wurde un immer nur auf das Beispiel contmenu in ShellExt verwiesen wurde, allerdings seh ich da (wie die anderen 3) nich durch, was ich überhaupt mit der dll machen soll.... |
Nichts für ungut, aber dann solltest du dich besser erst mal mit dem Prinzip vertraut machen, nach dem diese Shell-Erweiterung von Borland arbeitet. Deswegen auch der Tipp, die o.g. einfachere Variante über die normalen Registryeinträge zu benutzen.
Martin1966 hat folgendes geschrieben: | | Ich glaube die muss irgendwo registriert werden. |
Ein simples regsvr32 Dateiname.dll genügt. regsvr32 /u Dateiname.dll dient dann zum Entfernen der Bibliothek aus dem System. Idealerweise wird so etwas per Setup erledigt, damit sich der 08/15-Durchschnittsuser nicht mit der Registrierung von Shell-Erweiterungen herumschlagen muss. 
|
|
mtin 
      
Beiträge: 177
Win XP SP2
BDS2006 Enterprise
|
Verfasst: Mi 24.08.05 18:52
sorry, hab mir das mit den Dateitypen registrieren nochmal angeschaut, das würde völlig reichen...
nur eben das ich dann für jeden möglichen dateityp das registrieren müsste
ich glaub da muss ich mich einfach auf verpackte archive begrenzen, ist auch ok (.zip un .rar)
allerdings hab ich da gleich wieder nen paar fragen
also ich registrier den befehl hiermit
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Button2Click(Sender: TObject); var R: TRegistry; begin R := TRegistry.Create; try R.RootKey := HKEY_CLASSES_ROOT;
R.OpenKey('.zip', True); R.WriteString('', 'uploadfile'); R.CloseKey;
R.OpenKey('uploadfile\shell\Upload File\command', True); R.WriteString('',Form1.ediVerzeichniss.Text+'upload.exe %1'); R.CloseKey; except R.Free; end; end; |
doch dann wird mein eintrag als default-aktion genommen, also auch bei doppelklicken, das will ich aber nich ich will das nur zusätzlich zu den bisherigen kontextmenü-Einträgen...wie erreiche ich das?
und das nächste:
Der Pfad der dem Programm übergeben wird stimmt nicht immer, bei leerzeichen im pfad (z.b. "Dokumente und Einstellungen") werden diese abgekürzt ("DOKU~1")
was kann man da machen? so kann ich die datei ja nicht mehr finden (aus dem programm heraus...)
den pfad bekomme ich so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.FormActivate(Sender: TObject); var filename:string; begin if ParamCount > 0 then begin if ParamStr(1) = '/u' then begin showmessage(Paramstr(2)); end; end; end; |
un noch eine letzte frage: wie lösche ich diesen dateityp wieder? habs folgendermaßen probiert, ging nicht...:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.Button3Click(Sender: TObject); var R: TRegistry; begin R := TRegistry.Create; try R.RootKey := HKEY_CLASSES_ROOT;
R.OpenKey(Edit1.Text, True); R.DeleteKey(Edit1.Text); R.CloseKey;
R.OpenKey('uploadfile\shell\Upload to Ramzal\command', True); R.DeleteKey('uploadfile\shell\Upload to Ramzal\command'); R.CloseKey; except R.Free; end; end; |
ich hoff mal ich war nich schon wieder zu blöd zum suchen.... 
|
|
mtin 
      
Beiträge: 177
Win XP SP2
BDS2006 Enterprise
|
Verfasst: Mi 24.08.05 20:47
ok, hab jetzte schon von ganz alleine 2 meiner Probleme in den Griff bekommen
was nur echt problematisch ist is das ich nicht einfach mal diesen eintrag zu jedem dateityp hinzufügen kann, dadurch ersetze ich nämlich alle vorherigen Einträge und mache meine Aktion die "Default Aktion"
ich möchte aber das mein Eintrag einfach nur so untergeordnet erscheint, und das bei jedem beliebigen Dateityp!
ich habs jetzt erstmal so geschrieben, das funktioniert aber natürlich nur wenn man auch WinRAR drauf hat, bei einem anderen nicht.... Delphi-Quelltext 1: 2:
| R.OpenKey('WinRAR\shell\Upload to Ramzal\command', True); R.WriteString('','"'+paramstr(0)+'" "%1"'); |
R.CloseKey;
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 25.08.05 12:05
Warum schaust du dir nicht einfach meine Unit an, auf die ich in meinem ersten Beitrag verlinkt habe?
|
|
mtin 
      
Beiträge: 177
Win XP SP2
BDS2006 Enterprise
|
Verfasst: Do 25.08.05 14:39
 danke
|
|