Feedback

Herausfinden welches Programm ein bestimmtes Dokument öffnet

Sprache: C#

Welches Programm ist mit einem entsprechendem Dokument (z.B. Excel mit XLS) verknüpft? Dies ermittelt diese Funktion. Es reicht, wenn die Datei existiert, sie muss nicht den entsprechden Inhalt haben. So könnte eine leere "temp.xls" erstellt, die entsprechende Exe davon ermittelt und dann die "temp.xml" wieder gelöscht werden.
using System.Runtime.InteropServices;

// public class ........ {
// Api Deklarieren
[DllImport("shell32.dll", EntryPoint = "FindExecutable")]
public static extern long FindExecutableA(
  string lpFile, string lpDirectory, StringBuilder lpResult);

/// <summary>
/// Übergibt den Pfad zum Programm, das mit der angegebenen Datei verknüpft ist (z.B. JPG mit C:...IrfanView.exe)
/// </summary>
/// <param name="Path">Pfad zur Datei dessen Verknüpfung ermittelt werden soll</param>
/// <returns></returns>
public static string FindExe(string Path)
{
    StringBuilder objResult = new StringBuilder(1024);
    long lngResult = 0;

    lngResult = FindExecutableA(Path, "", objResult);

    if (lngResult >= 32)
    {
        return objResult.ToString();
    }

    return "";
}

// }
using System.Runtime.InteropServices;

// public class ........ {
// Api Deklarieren
[DllImport("shell32.dll", EntryPoint = "FindExecutable")]
public static extern long FindExecutableA(
  string lpFile, string lpDirectory, StringBuilder lpResult);

/// <summary>
/// Übergibt den Pfad zum Programm, das mit der angegebenen Datei verknüpft ist (z.B. JPG mit C:...IrfanView.exe)
/// </summary>
/// <param name="Path">Pfad zur Datei dessen Verknüpfung ermittelt werden soll</param>
/// <returns></returns>
public static string FindExe(string Path)
{
    StringBuilder objResult = new StringBuilder(1024);
    long lngResult = 0;

    lngResult = FindExecutableA(Path, "", objResult);

    if (lngResult >= 32)
    {
        return objResult.ToString();
    }

    return "";
}

// }

5 Kommentare

  1. Um ein Bild mit der Standard-Anwendung zu öffnen reicht Process.Start völlig. Das müsste auch dem cmd-Befehl „start“ entsprechen.

    Folgende Zeile tuts bei mir z.B. völlig:
    Process.Start(@“C:UsersTestDesktopIMG_0519.JPG“);

  2. Ich weiß, von der Seite her ist das Snippet auch nicht uninteressant.
    Ich wollte es nur erwähnen, da Carsten hier laut seiner Beschreibung komplizierter an das Problem rangegangen ist als es nötig ist.

  3. [b]So könnte eine leere „temp.xls“ erstellt, die entsprechende Exe davon ermittelt und dann die „temp.xml“ wieder gelöscht werden.[/b]
    Was den nun [u]temp.xls[/u] oder [u]temp.xml[/u] ?
    ‚~‘