كيفية إنشاء Office 2000 وظيفة الإضافية COM في Visual Basic

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية238228
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
الموجز
Microsoft Office 2000 ودعم لاحق الجديدة أو محدد موقع المعلومات هندسة التصميم لإنشاء التطبيق الإضافية تحسين والتحكم في تطبيقات Office. تسمى هذه الوظائف الإضافية وظائف COM الإضافية. فسوف توضح هذه المقالة كيفية إنشاء COM الوظيفة الإضافية باستخدام Visual Basic.
معلومات أخرى
الوظيفة الإضافية COM هو inprocess COM ملقم (DLL ActiveX) التي تقوم بتنفيذ الواجهة IDTExensibility2 كما هو موضح في الوظيفة الإضافية مصمم نوع مكتبة Microsoft (Msaddndr.dll). كافة وظائف COM الإضافية ترث من هذه الواجهة و يجب أن تقوم بتنفيذ كل من أساليب خمس الخاص به.

OnConnection

وقع الحدث OnConnection كلما كان متصلاً الوظيفة الإضافية COM. الوظيفة الإضافية تكون متصلاً قد على بدء التشغيل بواسطة المستخدم النهائي أو من خلال التنفيذ التلقائي. إذا تم إرجاع OnConnection بنجاح, الوظيفة الإضافية هو يقال يمكن تحميله. إذا تم إرجاع خطأ التطبيق المضيف مباشرة الإصدارات الخاصة به مرجع الوظيفة الإضافية ثم إتلاف الكائن.

يأخذ OnConnection المعلمات الأربع التالية:
  • تطبيقات - مرجع إلى كائن التطبيق المضيف.
  • ConnectMode ثابت يحدد كيفية الوظيفة الإضافية متصل.
    • ext_cm_AfterStartup - البدء من قِبَل المستخدم النهائي من مربع الحوار الوظائف الإضافية COM.
    • ext_cm_CommandLine - الاتصال من سطر الأوامر. (لا يتم تطبيق لإنشاء وظائف COM الإضافية لتطبيقات Office.)
    • ext_cm_External - متصلة بواسطة تطبيق خارجي خلال التنفيذ التلقائي. (لا يتم تطبيق لإنشاء وظائف COM الإضافية لتطبيقات Office.)
    • ext_cm_Startup - البدء من قبل المضيف عند بدء تشغيل التطبيق. (يتم التحكم هذا السلوك بواسطة إعداد في التسجيل.)
  • AddInInst مرجع إلى كائن COMAddIn الذي يشير إلى هذه الوظيفة الإضافية في "مجموعة وظائف COM الإضافية" التطبيق المضيف.
  • مخصص - صفيف متنوعات على هيئة التي يمكن الاحتفاظ البيانات المعرفة من قبل المستخدم.

OnDisconnection

وقع الحدث OnDisconnection عندما يتم قطع الوظيفة الإضافية COM و قبل إلغاء تحميل من الذاكرة. الوظيفة الإضافية يجب تنفيذ عملية تنظيف أي الموارد في هذا الحدث ثم استعادة أية تغييرات يتم إجراؤها إلى التطبيق المضيف.

يأخذ OnDisconnection معلمتين التالية:
  • RemoveMode ثابت يحدد كيفية الوظيفة الإضافية تم قطع اتصال.
    • ext_dm_HostShutdown - قطع الاتصال عند إغلاق التطبيق المضيف.
    • ext_dm_UserClosed - قطع الاتصال من قبل المستخدم النهائي "أو" وحدة تحكم التنفيذ.
  • مخصص - صفيف متنوعات على هيئة التي يمكن الاحتفاظ البيانات المعرفة من قبل المستخدم.

OnAddInsUpdate

وقع الحدث OnAddInsUpdate عند تغيير مجموعة المسجلة وظائف COM الإضافية. بمعنى آخر، كلما وظيفة الإضافية COM يتم تثبيت أو إزالة من التطبيق المضيف وقع هذا الحدث.

OnStartupComplete و OnBeginShutdown

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

لأن واجهة المستخدم للتطبيق المضيف نشط بشكل كامل عند تشغيل هذه الأحداث, فقد تكون الطريقة الوحيدة لتنفيذ إجراءات معينة وإلا ستكون متوفرة من OnConnection و OnDisconnection.

تسجيل الوظيفة الإضافية لـ COM

بالإضافة إلى تسجيل COM العادي وظيفة الإضافية COM يحتاج تسجيل نفسه مع كل تطبيق Office الذي يتم تشغيل. تسجيل نفسه مع تطبيق معين الوظيفة الإضافية عليك إنشاء مفتاح فرعي باستخدام ProgID الخاص به مثل اسم مفتاح ضمن الموقع التالي:
HKEY_CURRENT_USER\Software\Microsoft\Office\<OfficeApp>\Addins\<ProgID>
الوظيفة الإضافية يمكن أن يوفر القيم في هذا الموقع المفتاح عن اسم عرض مألوف ووصف كامل. بالإضافة إلى ذلك، الوظيفة الإضافية يجب تحديد سلوك التحميل المطلوب باستخدام قيمة DWORD تسمى "LoadBehavior." تحدد هذه القيمة الوظيفة الإضافية يتم تحميله من قبل التطبيق المضيف ، وكيفية تتكون من تركيبة من القيم التالية:
  • 0 = قطع الاتصال - ليس تحميله.
  • 1 = متصل - تم تحميله.
  • 2 = bootload - التحميل على التطبيق بدء التشغيل.
  • 8 = demandLoad - تحميل فقط عند طلبه من قبل المستخدم.
  • 16 = ConnectFirstTime - التحميل مرة واحدة فقط (عند بدء التشغيل التالي).
القيمة النموذجية المحددة هي 0x03 (متصل | Bootload).

يجب أيضاً تحديد الوظائف الإضافية التي تقوم بتنفيذ IDTExtensibility2 DWORD القيمة تسمى "CommandLineSafe" بالإشارة إلى ما إذا كان الآمن للعمليات التي لا تعتمد واجهة مستخدم. قيمة 0x00 يعني False ، 0x01 True.

إنشاء وظيفة الإضافية COM

يمكنك إنشاء COM الوظيفة الإضافية بإحدى الطرق الثلاث المذكورة أدناه:

إنشاء وظيفة الإضافية COM باستخدام قالب Com الإضافية

إذا كان لديك Microsoft Office 2000 المطور "أو" Microsoft Office XP المطور "و" Visual Basic 6.0 أسهل طريقة لإنشاء الوظيفة الإضافية COM استخدام قالب in.vbp إضافة COM. يوجد هذا المشروع في المجلد الفرعي ODETools\V9\Samples\OPG\Samples\CH11\VB_COM_AddIn على القرص المضغوط الخاص بـ Office 2000 المطور. نسخ الملفات في هذا المجلد إلى المجلد Visual Basic 6.0 Template\Projects وهو عادة Studio\VB98\Template\Projects C:\Program Files\Microsoft مرئية. نسخ مشروع قالب إلى هذا الموقع يؤكد على أن يظهر القالب في مربع الحوار "مشروع Visual Basic 6.0 جديد". راجع 11 الفصل من دليل للمبرمجين Visual Basic 2000 Microsoft Office للحصول على مزيد من المعلومات حول هذا القالب وإنشاء وظائف COM الإضافية.

إنشاء وظيفة الإضافية COM باستخدام مصمم الوظيفة في Visual Basic 6

إذا كان لديك تثبيت 6.0 Microsoft Visual Basic فقط وكنت تريد استخدام مجمّع بحيث لا تحتاج لتنفيذ IDTExtensibility2 مباشرة ، يمكنك استخدام نفس الوظيفة الإضافية المصمم التي ستستخدم لإنشاء In. إضافة VB6 اتبع الخطوات التالية لإنشاء مثل وظيفة إضافية لـ Microsoft Excel 2000 أو 2002:
  1. بدء تشغيل Microsoft Visual Basic 6.0 وحدد Addin كنوع المشروع. عليك ذلك إضافة فئة مصمم إلى المشروع (اتصال) ونموذج (frmAddin).
  2. فتح إطار "المصمم" الاتصال ثم حدد Microsoft Excel من القائمة المنسدلة التطبيق.
  3. في القائمة المنسدلة سلوك التحميل الأولي حدد بدء التشغيل.
  4. إزالة frmAddin من المشروع.
  5. من إطار Project انقر بزر الماوس الأيمن فوق العنصر الاتصال ثم حدد طريقة عرض التعليمات البرمجية.
  6. قم بإزالة كافة التعليمات البرمجية في إطار التعليمات البرمجية المصمم. تعمل هذه التعليمة البرمجية الوظائف الإضافية VB ولكن لا وظائف Office الإضافية.
  7. قم بإضافة التعليمات البرمجية التالية إلى المصمم:
       Option Explicit   Dim oXL As Object   Dim WithEvents MyButton As Office.CommandBarButton   Private Sub AddinInstance_OnConnection(ByVal Application As Object, _    ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _    ByVal AddInInst As Object, custom() As Variant)      On Error Resume Next      MsgBox "My Addin started in " & Application.Name         Set oXL = Application         Set MyButton = oXL.CommandBars("Standard").Controls.Add(1)         With MyButton            .Caption = "My Custom Button"            .Style = msoButtonCaption          ' The following items are optional, but recommended.           ' The Tag property lets you quickly find the control           ' and helps MSO keep track of it when there is more than          ' one application window visible. The property is required          ' by some Office applications and should be provided.            .Tag = "My Custom Button"           ' The OnAction property is optional but recommended.           ' It should be set to the ProgID of the add-in, such that if          ' the add-in is not loaded when a user presses the button,          ' MSO loads the add-in automatically and then raises          ' the Click event for the add-in to handle.             .OnAction = "!<" & AddInInst.ProgId & ">"            .Visible = True         End With      End Sub   Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As _      AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)      On Error Resume Next      MsgBox "My Addin was disconnected by " & _         IIf(RemoveMode = ext_dm_HostShutdown, _         "Excel shutdown.", "end user.")            MyButton.Delete      Set MyButton = Nothing      Set oXL = Nothing    End Sub   Private Sub MyButton_Click(ByVal Ctrl As Office.CommandBarButton, _     CancelDefault As Boolean)      MsgBox "Our CommandBar button was pressed!"   End Sub
  8. حفظ المشروع وإنشاء MyAddin.dll. سيتم تسجيل المصمم الوظيفة الإضافية نيابة عنك.
  9. فتح Microsoft Excel وقمت لاحظ مربع رسالة عند الوظيفة الإضافية يتم تحميل تم إلغاء تحميلها. على شريط الأدوات القياسي يجب تسمية زر مخصص جهاز الوظيفة الإضافية الخاصة بنا سيقوم بمعالجة عند تحديد زر جديد.

إنشاء وظيفة الإضافية COM باستخدام implements

بينما لا تكون كـ البسيطة, يمكنك إنشاء الوظيفة الإضافية COM باستخدام Microsoft Visual Basic 5.0 و الكلمة الأساسية Implements لتطبيق واجهة IDTExtensibility2 مباشرة. downside فقط إلى هذا الأسلوب هو التسجيل. حيث لم Microsoft Visual Basic تعرف كيفية إضافة مفاتيح الحاجة إلى تسجيل الوظيفة الإضافية مع Office, يجب القيام بذلك بشكل منفصل (في الأداة مساعدة إعداد مخصص أو استخدام برنامج نصي REG).

ومع ذلك، ميزة استخدام Implements هي أكثر مباشراً وأكثر كفاءة من استخدام المصمم و يسمح لنا لإنشاء كائن COM واحدة يمكن العمل في تطبيقات Office متعددة (بدلاً من إنشاء كائن اتصال منفصل لكل تطبيق نحن نريد العمل في).

فيما يلي الخطوات الخاصة بكتابة إضافة - في استخدام Implements:
  1. افتح Visual Basic ثم إنشاء مشروع جديد DLL ActiveX. اسم المشروع MyCOMAddin واسم الجمهور الفئة الاتصال.
  2. من مربع الحوار مراجع (Project | مراجع) ، إضافة مرجع إلى مكتبة النوع Microsoft الوظيفة الإضافية مصمم "و" مكتبة كائنات Microsoft Office 9.0 (أو 10.0 لـ Office XP). إذا لم تتمكن من العثور على "مصمم" الوظيفة الإضافية في قائمة مراجع يجب الاستعراض بحثاً عن Msaddndr.dll أو Msaddndr.tlb عادةً الموجود في المجلد "Files\Designer Files\Common C:\Program".
  3. في إطار التعليمات البرمجية لـ الاتصال بإضافة ما يلي:
       Option Explicit   Implements IDTExtensibility2   Dim oHostApp As Object   Dim WithEvents MyButton As Office.CommandBarButton  Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, _     ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _     ByVal AddInInst As Object, custom() As Variant)        On Error Resume Next    ' Set a reference to the host application...      Set oHostApp = Application       ' If you aren't in startup, then manually call OnStartupComplete...      If (ConnectMode <> ext_cm_Startup) Then _         Call IDTExtensibility2_OnStartupComplete(custom)         End Sub   Private Sub IDTExtensibility2_OnStartupComplete(custom() As Variant)      Dim oCommandBars As Office.CommandBars      Dim oStandardBar As Office.CommandBar         On Error Resume Next    ' Set up a custom button on the "Standard" commandbar...      Set oCommandBars = oHostApp.CommandBars      If oCommandBars Is Nothing Then       ' Outlook has the CommandBars collection on the Explorer object         Set oCommandBars = oHostApp.ActiveExplorer.CommandBars      End If         Set oStandardBar = oCommandBars.Item("Standard")      If oStandardBar Is Nothing Then       ' Access names it's main toolbar Database         Set oStandardBar = oCommandBars.Item("Database")      End If       ' In case the button was not deleted, use the exiting one...      Set MyButton = oStandardBar.Controls.Item("My Custom Button")         If MyButton Is Nothing Then            Set MyButton = oStandardBar.Controls.Add(1)            With MyButton               .Caption = "My Custom Button"               .Style = msoButtonCaption           ' The following items are optional, but recommended.           ' The Tag property lets you quickly find the control           ' and helps MSO keep track of it when there is more than          ' one application window visible. The property is required          ' by some Office applications and should be provided.            .Tag = "My Custom Button"           ' The OnAction property is optional but recommended.           ' It should be set to the ProgID of the add-in, such that if          ' the add-in is not loaded when a user presses the button,          ' MSO loads the add-in automatically and then raises          ' the Click event for the add-in to handle.                .OnAction = "!<MyCOMAddin.Connect>"               .Visible = True            End With         End If     ' Display a simple message to know which application you started in...      MsgBox "Started in " & oHostApp.Name & "."      Set oStandardBar = Nothing      Set oCommandBars = Nothing   End Sub   Private Sub IDTExtensibility2_OnDisconnection(ByVal RemoveMode As _     AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)      On Error Resume Next      If RemoveMode <> ext_dm_HostShutdown Then _         Call IDTExtensibility2_OnBeginShutdown(custom)            Set oHostApp = Nothing   End Sub   Private Sub IDTExtensibility2_OnBeginShutdown(custom() As Variant)      On Error Resume Next    ' Notify the user you are shutting down, and delete the button...      MsgBox "Our custom Add-In is unloading."      MyButton.Delete      Set MyButton = Nothing   End Sub   Private Sub MyButton_Click(ByVal Ctrl As Office.CommandBarButton,    CancelDefault As Boolean)      MsgBox "Our CommandBar button was pressed!"   End Sub   Private Sub IDTExtensibility2_OnAddInsUpdate(custom() As Variant)      'You do nothing if this is called, but you need to      'add a comment so Visual Basic properly implements the function...   End Sub
  4. حفظ المشروع وإنشاء MyCOMAddin.dll. ومع ذلك، قبل سوف تعمل الوظيفة الإضافية يجب أن يقترن كل تطبيق Office الذي ترغب في تشغيل في. في العالم الحقيقي، أداة إعداد مساعدة يمكن القيام بذلك عند تثبيت DLL. للحصول على هذا النموذج سوف استدعاء دالة تسجيل مباشرة من IDE Visual Basic.
  5. إضافة وحدة نمطية جديدة إلى المشروع. في التعليمة البرمجية الخاصة الوحدة النمطية 1 بإضافة ما يلي:
       Option Explicit   Private Declare Function RegCreateKeyEx Lib "advapi32.dll" _   Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _   ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As _   Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, _   phkResult As Long, lpdwDisposition As Long) As Long      Private Declare Function RegSetValueEx Lib "advapi32.dll" _   Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As _   String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, _   ByVal cbData As Long) As Long      Private Declare Function RegDeleteKey Lib "advapi32.dll" _   Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) _   As Long      Private Declare Function RegCloseKey Lib "advapi32.dll" _   (ByVal hKey As Long) As Long   Private Const HKEY_CURRENT_USER = &H80000001   Private Const KEY_ALL_ACCESS = &H1F0037   Private Const REG_CREATED_NEW_KEY = &H1   Private Const REG_SZ = 1   Private Const REG_DWORD = 4   'These are the settings for your Add-in...   Private Const PROGID As String = "MyCOMAddin.Connect"   Private Const DESCRIPTION As String = "My VB5/6 COM Add-In Sample"   Private Const LOADBEHAVIOR As Long = 3   Private Const SAFEFORCOMMANDLINE As Long = 0   Public Sub RegisterAll()      RegisterOfficeAddin "Access"      RegisterOfficeAddin "Excel"      RegisterOfficeAddin "FrontPage"      RegisterOfficeAddin "Outlook"      RegisterOfficeAddin "PowerPoint"      RegisterOfficeAddin "Word"   End Sub   Public Sub UnregisterAll()      UnRegisterOfficeAddin "Access"      UnRegisterOfficeAddin "Excel"      UnRegisterOfficeAddin "FrontPage"      UnRegisterOfficeAddin "Outlook"      UnRegisterOfficeAddin "PowerPoint"      UnRegisterOfficeAddin "Word"   End Sub   Public Sub RegisterOfficeAddin(sTargetApp As String)      Dim sRegKey As String      Dim nRet As Long, dwTmp As Long      Dim hKey As Long         sRegKey = "Software\Microsoft\Office\" & sTargetApp _         & "\Addins\" & PROGID         nRet = RegCreateKeyEx(HKEY_CURRENT_USER, sRegKey, 0, _         vbNullString, 0, KEY_ALL_ACCESS, 0, hKey, dwTmp)            If nRet = 0 Then         If dwTmp = REG_CREATED_NEW_KEY Then            Call RegSetValueEx(hKey, "FriendlyName", 0, _               REG_SZ, ByVal PROGID, Len(PROGID))            Call RegSetValueEx(hKey, "Description", 0, _               REG_SZ, ByVal DESCRIPTION, Len(DESCRIPTION))            Call RegSetValueEx(hKey, "LoadBehavior", 0, _               REG_DWORD, LOADBEHAVIOR, 4)            Call RegSetValueEx(hKey, "CommandLineSafe", 0, _               REG_DWORD, SAFEFORCOMMANDLINE, 4)         End If         Call RegCloseKey(hKey)      End If      End Sub   Public Sub UnRegisterOfficeAddin(sTargetApp As String)      Dim sRegKey As String      sRegKey = "Software\Microsoft\Office\" & sTargetApp _         & "\Addins\" & PROGID          Call RegDeleteKey(HKEY_CURRENT_USER, sRegKey)      End Sub
  6. من إطار فوري (عرض | الإطار الحالي) ، اكتب RegisterAll ومن ثم اضغط ENTER. سيقوم هذا التسجيل الوظيفة الإضافية مع كافة تطبيقات Office المعتمدة (Access و Excel ، FrontPage ، Outlook ، PowerPoint و Word).
  7. فتح أي من تطبيقات Office سرد قبل. لاحظ مربع رسالة على بدء التشغيل "و" إيقاف التشغيل "و" زر مخصص إضافة إلى شريط الأدوات القياسي.
  8. إذا كنت ترغب في إلغاء تسجيل الوظيفة الإضافية اكتب UnregisterAll في الإطار الحالي Visual Basic ومن ثم اضغط ENTER.
مراجع
"Microsoft Office 2000 Visual Basic للمبرمجين الخاص دليل" ، 11 الفصل. الوظائف الإضافية قوالب ، معالجات و مكتبات.

للحصول على مزيد من المعلومات حول كتابة وظائف COM الإضافية انقر فوق أرقام المقالات التالية لعرضها في "قاعدة المعارف لـ Microsoft:
230689نموذج: Comaddin.exe Office 2000 وظيفة COM الإضافية المكتوبة في Visual C++
190253لا تعمل مصممي VB6 في VB5
للحصول على مزيد من المعلومات حول تطوير الحلول المستندة إلى ويب لبرنامج Microsoft Internet Explorer، قم بزيارة موقع Microsoft التالي على الويب:ملاحظة عند إضافة عنصر قائمة إلى Office Word من وظيفة الإضافية COM Visual Basic باستخدام الخطوات المسردة في هذه المقالة أو باستخدام طريقة مشابهة, عنصر القائمة لا يعمل كما هو متوقع. لمزيد من المعلومات، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
313948Word يفقد مرجع إلى عناصر القائمة كائن COM (CommandBarControl)
addin

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 238228 - آخر مراجعة: 12/05/2015 15:21:09 - المراجعة: 6.2

Microsoft Excel 2000 Standard Edition, Microsoft Office XP Developer Edition, Microsoft Office 2000 Developer Edition, Microsoft Access 2002 Standard Edition, Microsoft Access 2000 Standard Edition, Microsoft Excel 2002 Standard Edition, Microsoft FrontPage 2002 Standard Edition, Microsoft FrontPage 2000 Standard Edition, Microsoft Outlook 2002 Standard Edition, Microsoft Outlook 2000, Microsoft PowerPoint 2002 Standard Edition, Microsoft PowerPoint 2000 Standard Edition, Microsoft Word 2002 Standard Edition, Microsoft Word 2000 Standard Edition, Microsoft Visual Basic 5.0 Professional Edition, Microsoft Visual Basic 6.0 Professional Edition, Microsoft Visual Basic 5.0 Enterprise Edition, Microsoft Visual Basic Enterprise Edition for Windows 6.0

  • kbnosurvey kbarchive kbmt kbautomation kbhowto KB238228 KbMtar
تعليقات