Bestimmen der Standardanwendung zum Öffnen eines Dateityps unter Windows
Das Öffnen von Dateien mit der entsprechenden Standardanwendung ist eine häufige Aufgabe für viele Anwendungen. Um dies in .NET Framework 2.0 mit C# zu erreichen, können Sie die Methode System.Diagnostics.Process.Start verwenden. Diese Methode erfordert jedoch die genaue Dateierweiterung, um die Standardanwendung zu bestimmen.
Um Dateien ohne eine bestimmte Erweiterung in der gewünschten Standardanwendung zu öffnen, müssen Sie die mit dem Dateityp verknüpfte Anwendung abrufen. Während die Verwendung der Registrierung zum Ermitteln dieser Zuordnung ein unzuverlässiger Ansatz ist, bietet die Win32-API eine robustere Methode.
Mit der AssocQueryString-Funktion in der Shlwapi.dll-Bibliothek können Sie die Zuordnung für einen bestimmten Dateityp abfragen. Mit dieser Funktion können Sie den Standardbefehl, die ausführbare Datei oder andere relevante Informationen für den Dateityp ermitteln.
Die Beispielverwendung zeigt, wie Sie AssocQueryString verwenden, um den mit einer Dateierweiterung verknüpften Befehl abzurufen:
using System; using System.Runtime.InteropServices; namespace FileAssociation { class Program { [DllImport("Shlwapi.dll", CharSet = CharSet.Unicode)] public static extern uint AssocQueryString( AssocF flags, AssocStr str, string pszAssoc, string pszExtra, [Out] StringBuilder pszOut, ref uint pcchOut); public enum AssocF { None = 0x00000000, Init_NoRemapCLSID = 0x00000001, Init_ByExeName = 0x00000002, Open_ByExeName = 0x00000002, Init_DefaultToStar = 0x00000004, Init_DefaultToFolder = 0x00000008, NoUserSettings = 0x00000010, NoTruncate = 0x00000020, Verify = 0x00000040, RemapRunDll = 0x00000080, NoFixUps = 0x00000100, IgnoreBaseClass = 0x00000200, Init_IgnoreUnknown = 0x00000400, Init_Fixed_ProgId = 0x00000800, Is_Protocol = 0x00001000, Init_For_File = 0x00002000 } public enum AssocStr { Command = 1, Executable, FriendlyDocName, FriendlyAppName, NoOpen, ShellNewValue, DDECommand, DDEIfExec, DDEApplication, DDETopic, InfoTip, QuickTip, TileInfo, ContentType, DefaultIcon, ShellExtension, DropTarget, DelegateExecute, Supported_Uri_Protocols, ProgID, AppID, AppPublisher, AppIconReference, Max } public static string AssocQueryString(AssocStr association, string extension) { const int S_OK = 0x00000000; const int S_FALSE = 0x00000001; uint length = 0; uint ret = AssocQueryString(AssocF.None, association, extension, null, null, ref length); if (ret != S_FALSE) { throw new InvalidOperationException("Could not determine associated string"); } var sb = new StringBuilder((int)length); // (length - 1) will probably work too as the marshaller adds null termination ret = AssocQueryString(AssocF.None, association, extension, null, sb, ref length); if (ret != S_OK) { throw new InvalidOperationException("Could not determine associated string"); } return sb.ToString(); } public static void Main(string[] args) { string extension = ".txt"; string command = AssocQueryString(AssocStr.Command, extension); System.Diagnostics.Process.Start(command, "test.txt"); } } }
Das obige ist der detaillierte Inhalt vonWie kann man programmgesteuert die Standardanwendung zum Öffnen eines Dateityps in Windows bestimmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!