Autor Beitrag
mtin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177

Win XP SP2
BDS2006 Enterprise
BeitragVerfasst: 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 :wink:
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 24.08.05 00:26 
Wurde hier im Forum schon oft genug besprochen. Benutz die Suche.
mtin Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177

Win XP SP2
BDS2006 Enterprise
BeitragVerfasst: 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



BeitragVerfasst: Mi 24.08.05 03:40 
Luckie meinte vermutlich was anderes: nämlich Suche in: Delphi-Forum, Delphi-Library "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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177

Win XP SP2
BDS2006 Enterprise
BeitragVerfasst: 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"...
user defined image
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: Mi 24.08.05 11:17 
Beispiele dafür findest du in dem Verzeichnis "<DelphiInstallPath>\Demos\Activex\Shellext".

_________________
Ciao, Sprint.
mtin Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177

Win XP SP2
BDS2006 Enterprise
BeitragVerfasst: Mi 24.08.05 11:22 
user profile iconmtin 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....


:oops: :oops:
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Mi 24.08.05 11:43 
user profile iconmtin 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



BeitragVerfasst: Mi 24.08.05 12:17 
user profile iconmtin 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.


user profile iconMartin1966 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177

Win XP SP2
BDS2006 Enterprise
BeitragVerfasst: 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 :roll:
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 :lol:
also ich registrier den befehl hiermit
ausblenden 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:
ausblenden 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...:
ausblenden 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.... :oops:
mtin Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177

Win XP SP2
BDS2006 Enterprise
BeitragVerfasst: Mi 24.08.05 20:47 
ok, hab jetzte schon von ganz alleine 2 meiner Probleme in den Griff bekommen :D

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....
ausblenden 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177

Win XP SP2
BDS2006 Enterprise
BeitragVerfasst: Do 25.08.05 14:39 
:oops: danke