Entwickler-Ecke
Windows API - Aktuell markierte Datei auslesen
mcbain - Mi 13.04.11 12:59
Titel: Aktuell markierte Datei auslesen
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
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
Narses: Topic aus Sonstiges (Delphi) verschoben am Mi 13.04.2011 um 13:03
jaenicke - Mi 13.04.11 14:23
mcbain hat folgendes geschrieben : |
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 - 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.
Delete - Mi 13.04.11 14:45
Ja.
mcbain - 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ü:
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 - 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 - 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.
Delete - 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!