Entwickler-Ecke

Dateizugriff - Herrausfinden ob eine bestimmte datei endung mit meiner anwn


mimi - Sa 19.03.05 11:09
Titel: Herrausfinden ob eine bestimmte datei endung mit meiner anwn
Hallo,
wie kann ich herrausfinden ob eine bestimmte datei anwendung mit meiner anwendung verküpft ist ???


AXMD - Sa 19.03.05 11:13

Du meinst Dateiendungen? Einfach mal unter HKCR nach .txt oder was immer du suchst reinschauen ;)

AXMD


mimi - Sa 19.03.05 12:12

gibst es da nicht schon was fertiges ???


Sprint - Sa 19.03.05 12:29

user profile iconmimi hat folgendes geschrieben:
gibst es da nicht schon was fertiges?

z.B. die Win32 API Funktion FindExecutable. Hat aber den Nachteil, dass zum Überprüfen die Datendatei tatsächlich vorhanden sein muss.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
uses ShellAPI;

procedure TForm1.Button1Click(Sender: TObject);

  function FindExecutable(const FileName: String): String;
  var
    Buffer: array[0..MAX_PATH] of Char;
  begin
    if ShellAPI.FindExecutable(PChar(FileName), nil, Buffer) > 32 then
      Result := Buffer
    else
      Result := '';
  end;

begin

  ShowMessage(FindExecutable('C:\TEST.TXT'));

end;


mimi - Sa 19.03.05 12:44

d.h. die datei muss es wirklich geben ?
(if FileExists(datei) = True) then...)
diese funktion habe ich auch schon gefunden.....


Sprint - Sa 19.03.05 14:15

Hab nochmal im PSDK geschaut. Da gibt es noch die Funktion AssocQueryString, um z.B. die Dateierweiterung aufzulösen. Nachteil ist das mindestens der IE5 installiert sein muss.


Delphi-Quelltext
1:
2:
function AssocQueryString(Flags: Integer; Str: Integer; pszAssoc, pszExtra, pszOut: PChar;
  var pcchOut: DWORD): HRESULT; stdcallexternal 'shlwapi.dll' name 'AssocQueryStringA';


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
function FindExecutable(const Extension: String): String;
const
  ASSOCF_NOTRUNCATE = $00000020;
  ASSOCSTR_EXECUTABLE = 2;
var
  BufSize: DWORD;
begin
  BufSize := MAX_PATH;
  SetLength(Result, BufSize);
  if AssocQueryString(ASSOCF_NOTRUNCATE, ASSOCSTR_EXECUTABLE, PChar(Extension), 'open',
  PChar(Result), BufSize) = S_OK then
    SetLength(Result, BufSize - 1)
  else
    Result := '';
end;


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1Click(Sender: TObject);
begin

  // Ergebnis sollte unter einer Standard Windows XP Installation
  // "C:\WINDOWS\SYSTEM32\NOTEPAD.EXE" sein

  ShowMessage(FindExecutable('.txt'));

end;


Hab das jetzt nur unter Windows XP getestet. Wie sich das unter anderen Windows OS verhält, musst du selber herausfinden.


mimi - Sa 19.03.05 20:21

vielen dank, sowas habe ich gesucht, ich denke das jeder den IE installiert hat, ob er den bentzt oder nicht ist ja egal, ich nutzte ihn z.b. nicht... aber vileicht gibt es ja auch eine lösung die über alle funktioniert ?