Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Anwendung zur Dateierweiterung aus der Registry lesen (https://www.delphipraxis.net/185216-anwendung-zur-dateierweiterung-aus-der-registry-lesen.html)

mm1256 22. Mai 2015 16:02

Anwendung zur Dateierweiterung aus der Registry lesen
 
Hallo,

früher ging da ja einfach, und auch alle Suchergebnisse im WEB bringen das "alte" Ergebnis. Wo früher unter "shell\open\command" das Programm stand, steht bei mir beispielsweise unter ".mid" der "PersistentHandler". Suche ich über dessen ID weiter, komme ich zum Key "PersistentAddinsRegistered", welcher wieder einen Unter-Key hat. Der wiederum hat nur den Key "InprocServer32". Hier ist aber kein Verweis auch die Programmdatei.

Gibt es denn eine Doku, wie das alles zusammen hängt. Ideal wäre natürlich ein Beispielcode.

Perlsau 22. Mai 2015 16:06

AW: Anwendung zur Dateierweiterung aus der Registry lesen
 
Was heißt "früher"? Windows 98, 2000, XP, Win7?
Was heißt "jetzt"? WinXP, Win2000, Win7?

p80286 22. Mai 2015 16:39

AW: Anwendung zur Dateierweiterung aus der Registry lesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
W7 müßte unter "früher" fallen:

mm1256 22. Mai 2015 19:38

AW: Anwendung zur Dateierweiterung aus der Registry lesen
 
Zitat:

Zitat von Perlsau (Beitrag 1302606)
Was heißt "früher"? Windows 98, 2000, XP, Win7?
Was heißt "jetzt"? WinXP, Win2000, Win7?

Du hast also auch keinen Plan und weißt nicht, was - und wann - Microsoft da geändert hat (nehme ich zumindest jetzt an, sonst würdest du nicht fragen, was ich mit "früher" meine).

Die "alte Logik" zum Eintragen einer Dateierweiterung funktioniert ja nach wie vor auch unter Win7 und Win8, aber ich muss leider den umgekehrten Weg gehen...die passende Anwendung zur Dateierweiterung finden.

Dalai 22. Mai 2015 19:55

AW: Anwendung zur Dateierweiterung aus der Registry lesen
 
Ist zwar nicht so ganz das, was du suchst, aber vielleicht hilft es dir trotzdem weiter: ExtractAssociatedIcon:
Zitat:

lpIconPath [in, out]
[...]The function extracts the icon handle from that file, or from an executable file associated with that file. If the icon handle is obtained from an executable file, the function stores the full path and file name of that executable in the string pointed to by lpIconPath.
D.h. wenn man der Funktion ein "C:\dokument.doc" übergibt, müsste man den Pfad zu Word bzw. WordPad im selben Parameter wiederfinden. Ob das tatsächlich so ist, weiß ich nicht. Ich vermute sogar, dass es eine geeignetere Funktion für die Aufgabe gibt.

MfG Dalai

DeddyH 22. Mai 2015 19:57

AW: Anwendung zur Dateierweiterung aus der Registry lesen
 
Evtl. MSDN-Library durchsuchenFindExecutable?

mm1256 22. Mai 2015 23:35

AW: Anwendung zur Dateierweiterung aus der Registry lesen
 
Vielen Dank DeddyH, genau das isses :thumb:

Zur Info für die Mitleser:

Delphi-Quellcode:
function FindExeForFileName(AFileName : string;
                          var AResult : string): boolean;
var
  Buffer : array[0..MAX_PATH] of Char;
  Handle: THandle;
begin
  AResult := 'Unbekannt';
  Handle := FindExecutable(PChar(AFileName),nil,Buffer);
  Result := Handle > 32; // EDIT: Fehler, war Handle >= 32
  if Result then AResult := String(Buffer) else
  case Handle of
    SE_ERR_FNF : AResult := 'Datei '+AFileName+' ist nicht vorhanden';
    SE_ERR_PNF : AResult := 'Ungültiger Pfad'; // kann eigentlich nicht sein ;-)
    SE_ERR_ACCESSDENIED : AResult := 'Zugriff verweigert';
    SE_ERR_OOM : AResult := 'Woow...kein Speicher mehr. XE-8 läuft ???';
    SE_ERR_NOASSOC : AResult := 'Kein assoziiertes Programm gefunden';
  end;
end;

Luckie 22. Mai 2015 23:51

AW: Anwendung zur Dateierweiterung aus der Registry lesen
 
Und wo wird der Rückgabewert der Funktion zugewiesen?

Sir Rufo 23. Mai 2015 00:00

AW: Anwendung zur Dateierweiterung aus der Registry lesen
 
Zitat:

Zitat von Luckie (Beitrag 1302704)
Und wo wird der Rückgabewert der Funktion zugewiesen?

In der dritten Zeile nach dem
Delphi-Quellcode:
begin
?

Allerdings wäre eine Exception hier besser ...

Aviator 23. Mai 2015 00:03

AW: Anwendung zur Dateierweiterung aus der Registry lesen
 
Zitat:

Zitat von mm1256 (Beitrag 1302703)
Delphi-Quellcode:
function FindExeForFileName(AFileName : string;
                          var AResult : string): boolean;
var
  Buffer : array[0..MAX_PATH] of Char;
  Handle: THandle;
begin
  AResult := 'Unbekannt';
  Handle := FindExecutable(PChar(AFileName),nil,Buffer);
  Result := Handle >= 32;            ////  <---------------  Ich würde sagen ... hier!!
  if Result then AResult := String(Buffer) else
  case Handle of
    SE_ERR_FNF : AResult := 'Datei '+AFileName+' ist nicht vorhanden';
    SE_ERR_PNF : AResult := 'Ungültiger Pfad'; // kann eigentlich nicht sein ;-)
    SE_ERR_ACCESSDENIED : AResult := 'Zugriff verweigert';
    SE_ERR_OOM : AResult := 'Woow...kein Speicher mehr. XE-8 läuft ???';
    SE_ERR_NOASSOC : AResult := 'Kein assoziiertes Programm gefunden';
  end;
end;

Eine Exception wird ja so wie ich das sehe durch FindExecutable ausgelöst. Er könnte allerdings die GetLastError() Funktion verwenden, um die Fehlermeldungen noch auszugeben. Aber anscheinend wollte er sich seine eigenen Messages erstellen. :stupid:


[Edit]RedBox???[/Edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz