شبابيك:قائمة وتشغيل التطبيقات المرتبطة بالامتداد

StackOverflow https://stackoverflow.com/questions/24954

  •  09-06-2019
  •  | 
  •  

سؤال

كيفية تحديد التطبيقات المرتبطة بامتداد معين (على سبيل المثال..JPG) ثم حدد مكان وجود الملف القابل للتنفيذ لهذا التطبيق بحيث يمكن تشغيله عبر استدعاء System.Diagnostics.Process.Start(...).

أنا أعرف بالفعل كيفية القراءة والكتابة في السجل.إن تخطيط السجل هو الذي يجعل من الصعب تحديد التطبيقات المرتبطة بالامتداد بطريقة قياسية، وما هي أسماء العرض الموجودة، ومكان وجود ملفاتها التنفيذية.

هل كانت مفيدة؟

المحلول

عينة من الرموز:

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);
                }
            }
        }
    }
}

نصائح أخرى

كما قال Anders - إنها فكرة جيدة استخدام واجهة IQueryAssociations COM.وهنا أ عينة من pinvoc.net

@أكو:لا تنسَ HKEY_CLASSES_ROOT\SystemFileAssociations\

لست متأكدًا مما إذا كانت مكشوفة في .NET، ولكن هناك واجهات COM (IQueryAssociations والأصدقاء) التي تتعامل مع هذا حتى لا تضطر إلى العبث في السجل وتأمل ألا تتغير الأشياء في إصدار Windows التالي

أيضًا HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\

.تحويلةمفتاح ‎\OpenWithList لقائمة "فتح العرض..." (قيم السلسلة 'a' و'b' و'c' و'd' وما إلى ذلك للاختيارات)

.تحويلةمفتاح \UserChoice لـ "استخدم البرنامج المحدد دائمًا لفتح هذا النوع من الملفات" (قيمة قيمة السلسلة 'Progid')

جميع القيم هي مفاتيح، وتستخدم بنفس الطريقة docName في المثال أعلاه.

يتم تخزين اقترانات أنواع الملفات في سجل Windows، لذا يجب أن تكون قادرًا على استخدام ملف فئة Microsoft.Win32.Registry لقراءة التطبيق الذي تم تسجيله لأي تنسيق الملف.

فيما يلي مقالتان قد تكونان مفيدتين:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top