Autor Beitrag
mcbain
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 1



BeitragVerfasst: Mi 13.04.11 12:59 
Hallo,
ich habe eine Anwendung geschrieben, welche im Kontextmenü einer jeden Datei hinterlegt ist. Jetzt würde ich gerne bei Aufruf meiner Anwendung den Namen der Datei wissen, welche ich gerade ausgewählt habe.

Mit
ausblenden Delphi-Quelltext
1:
GetDir(0, Result)					

bekomme ich zwar schonmal das Arbeitsverzeichnis der gewählten Datei, aber noch nicht den Dateinamen.
Kennt jemand eine Möglichkeit das Verzeichnis + Dateinamen einer markierten Datei auszulesen?

Wäre für jeden Hinweis dankbar.


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mi 13.04.2011 um 13:03
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 13.04.11 14:08 
Dafür brauchst du eine ShellExtension:
www.michael-puff.de/...ung/Delphi/Programme -> ExifReader.zip
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 13.04.11 14:23 
user profile iconmcbain hat folgendes geschrieben Zum zitierten Posting springen:
ich habe eine Anwendung geschrieben, welche im Kontextmenü einer jeden Datei hinterlegt ist. Jetzt würde ich gerne bei Aufruf meiner Anwendung den Namen der Datei wissen, welche ich gerade ausgewählt habe.
Den bekommst du vermutlich als Parameter, je nachdem ob es sich um eine ShellExtension handelt (dann nicht) oder du einfach die Exe als Kommando in shell\open in der Registry eingetragen hast (dann schon).
mcbain Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 1



BeitragVerfasst: Mi 13.04.11 14:27 
Mit dem ExifReader kann ich die aktuell in Windows markierte Datei, z.b. test.exe, ermitteln und den string in Delphi verwenden?
Kommt mir alles bischen komisch vor in dem zip-file.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 13.04.11 14:45 
Ja.
mcbain Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 1



BeitragVerfasst: Do 14.04.11 08:09 
Vielen Dank für eure Antworten.
Ich habe es jetzt folgendermaßen geregelt:

Per Button installiere ich auf Bedarf meine Anwendung im Kontextmenü:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var regist : TRegistry; 
begin
  regist := TRegistry.Create;
                
  with regist do
  begin
    RootKey := HKEY_CLASSES_ROOT;
    OpenKey('*\shell\Delphi\',True);
    WriteString('',Application.ExeName);
    CloseKey;
    OpenKey('*\shell\Delphi\command',True);
    WriteString('',Application.ExeName+' "%1"');
    CloseKey;
  end;
  regist.Free;
end;


Rufe ich nun mit Rechtsklick irgendeine Anwendung im Windows Explorer auf und wähle meinen gerade erstellten Kontextmenü-Eintrag, so wird mein Programm aufgerufen.
Jetzt muss man nur noch mit ParamStr(1) den Parameter auslesen und schon hat man die Anwendung, die im Explorer markiert wurde.

Ich hoffe, ich konnte jemanden mit dem kleinen Beispiel weiterhelfen.
Gruß
mc
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 14.04.11 08:26 
Wobei da komplett die Fehlerbehandlung fehlt...
Du hast das try..finally vergessen, außerdem wirfst du den Rückgabewert von OpenKey weg statt zu prüfen, ob der Schlüssel geöffnet werden konnte. Und das kann ins Auge gehen, es sei denn deine Anwendung fordert beim Start bereits sowieso immer Adminrechte an (was ja auch wieder schlecht wäre). Andernfalls hat die Anwendung ja gar nicht immer die notwendigen Rechte...

Und da du dann nicht einmal den Rückgabewert von OpenKey prüfst :shock:, bekommst du ohne Adminrechte eine schöne Exception und hast, da du nicht einmal try..finally benutzt, ein schönes Speicherleck... von der unschönen Fehlermeldung durch die Exception im Programm ganz abgesehen...

Besser wäre zu schauen, ob du Adminrechte hast und andernfalls die Anwendung mit ShellExecute und 'runas' als Verb zu starten (mit Parametern, an denen du erkennst was passieren soll), damit es nicht nur bei wenigen zufällig funktioniert...
mcbain Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 1



BeitragVerfasst: Do 14.04.11 08:56 
Ich habe hier natürlich nicht alles aufgenommen, sondern eben nur das notwendigste, damit andere schneller wissen wo und wie sie ansetzen müssen.
Natürlich sollte man das dann mit der Fehlerbehandlung etc. wie jaenicke es beschreibt einbauen. Danke für die Anregung.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 14.04.11 09:32 
Du weißt aber, dass dein Programm dafür Administratorenrechte benötigt? Genauso, wie meine Shellerweiterung bei der Installation.