2008-08-24 31 views
14

Cách xác định các ứng dụng được liên kết với một phần mở rộng cụ thể (ví dụ .JPG) và sau đó xác định vị trí thực thi của ứng dụng đó để có thể khởi chạy. System.Diagnostics.Process.Start (...).Windows: Liệt kê và khởi chạy các ứng dụng liên quan đến phần mở rộng

Tôi đã biết cách đọc và ghi vào sổ đăng ký. Đó là cách bố trí của sổ đăng ký mà làm cho nó khó khăn hơn để xác định một cách tiêu chuẩn những gì các ứng dụng được liên kết với một phần mở rộng, những gì đang có tên hiển thị, và nơi thực thi của họ được đặt.

Trả lời

8

Mẫu mã:

using System; 
using Microsoft.Win32; 

namespace GetAssociatedApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      const string extPathTemplate = @"HKEY_CLASSES_ROOT\{0}"; 
      const string cmdPathTemplate = @"HKEY_CLASSES_ROOT\{0}\shell\open\command"; 

      // 1. Find out document type name for .jpeg files 
      const string ext = ".jpeg"; 

      var extPath = string.Format(extPathTemplate, ext); 

      var docName = Registry.GetValue(extPath, string.Empty, string.Empty) as string; 
      if (!string.IsNullOrEmpty(docName)) 
      { 
       // 2. Find out which command is associated with our extension 
       var associatedCmdPath = string.Format(cmdPathTemplate, docName); 
       var associatedCmd = 
        Registry.GetValue(associatedCmdPath, string.Empty, string.Empty) as string; 

       if (!string.IsNullOrEmpty(associatedCmd)) 
       { 
        Console.WriteLine("\"{0}\" command is associated with {1} extension", associatedCmd, ext); 
       } 
      } 
     } 
    } 
} 
+7

Tốt hơn để sử dụng IQueryAssociations –

4

@aku: Đừng quên HKEY_CLASSES_ROOT \ SystemFileAssociations \

Không chắc chắn nếu chúng được tiếp xúc trong .NET, nhưng có giao diện COM (IQueryAssociations và bạn bè) mà đối phó với điều này, do đó bạn không phải muck xung quanh trong registry và hy vọng công cụ không thay đổi trong phiên bản cửa sổ tiếp theo

8

Giống như Anders cho biết - Bạn nên sử dụng giao diện COM IQueryAssociations. Dưới đây là một sample from pinvoke.net

+2

Liên kết được bao gồm dành cho AssocCreate. Liên kết tới AssocQuery là: http: //www.pinvoke.net/default.aspx/shlwapi.AssocQueryString – epotter

1

Cũng HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts \

. EXT \ Phím OpenWithList cho danh sách "Mở rộng ..." (giá trị chuỗi 'a', 'b', 'c', 'd' vv cho các lựa chọn)

. EXT \ trọng lựa chọn của người cho "Luôn sử dụng chương trình được lựa chọn để mở loại tập tin" (giá trị string value 'ProgID')

Tất cả các giá trị là chìa khóa, sử dụng cùng một cách như DOCNAME trong ví dụ trên .

Các vấn đề liên quan