الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تسجيل أداة أكتيف إكس برمجياً

بدأه غرّام العقول في 23 أكتوبر 2012 · 17 رد · 2,786 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أحياناً نضطر إلى استخدام المكتبات في برامجنا .. وطالما أن المكتبة مسجلة لدينا, فالبرنامج يعمل بشكل جيد, لكن المشكلة عندما ننقل البرنامج إلى جهاز العميل, عندها يجب تسجيل المكتبة في جهازه.

السؤال هو: كيف يمكن تسجيل المكتبة لدى العميل برمجياً أثناء فتح البرنامج مثلاً .. بدون أن نشق عليه بالذهاب إلى ابدأ ثم تشغيل ثم كتابة الأمر .....regsver32

أرجو ممن لديه معلومات عن هذا الموضوع أن لا يبخل علينا بالإجابة, وجزاكم الله خيراً.

#2
غرّام العقول كتب:

السلام عليكم ورحمة الله وبركاته

أحياناً نضطر إلى استخدام المكتبات في برامجنا .. وطالما أن المكتبة مسجلة لدينا, فالبرنامج يعمل بشكل جيد, لكن المشكلة عندما ننقل البرنامج إلى جهاز العميل, عندها يجب تسجيل المكتبة في جهازه.

السؤال هو: كيف يمكن تسجيل المكتبة لدى العميل برمجياً أثناء فتح البرنامج مثلاً .. بدون أن نشق عليه بالذهاب إلى ابدأ ثم تشغيل ثم كتابة الأمر .....regsver32

أرجو ممن لديه معلومات عن هذا الموضوع أن لا يبخل علينا بالإجابة, وجزاكم الله خيراً.

اخي الفاضل : غرام العقول

السلام عليكم ورحمة الله وبركاته

وكل عام وانتم بخير

هل من الممكن وضع مثال على قاعدة بيانات وهذه القاعدة مرتبطة بمكتبه معينة مثل OCX او DLL مع وضع المكتبة في مجلد القاعدة !!!!

حتى يتسنى لنا عمل الكود اللازم لتسجيل المكتبة برمجيا اثناء فتح القاعدة .

بالتوفيق

1
#3

وعليكم السلام ورحمة الله وبركاته

السيدة الفاضلة الأستاذة الدكتورة/ زهرة العبدالله

وكل عام وأنتم بألف خير وصحة وعافية

المثال المرفق هو بعض منحكم وعطاياكم

RegLib.rar

#4

تفضل اخي الفاضل : غرام العقول

اولا : نحتاج الى وحدة نمطية نضع فيها هاتين الوظيفتين

الوظيفة الأولى : مهمتها التأكد هل الملف موجود في مجلد النظام ام لا فإن كان الملف موجود مسبقا فلا يوجد مشكله ويتم تسجيله فورا اما اذا لم يكن الملف موجود في مجلد النظام فهنا نحتاج الى الوظيفة الثانية لنسخه اولا الى مجلد النظام ثم تسجيله بعد ذلك

Public Function DoesFileExist(vPathAndFile As String) As Boolean
     If Len(Dir$(vPathAndFile)) > 0 Then DoesFileExist = True Else DoesFileExist = False
End Function

الوظيفة الثانية : نسخ الملف الموجود في مجلد القاعدة الى مجلد النظام

Public Function CopyFile(vPathSource As String, vPathDestination As String)
     Dim foOptions As SHFILEOPSTRUCT
     With foOptions
     .Function = FO_COPY
     .From = vPathSource
     .To = vPathDestination
     .Flags = 0
     .Flags = .Flags Or FOF_NOCONFIRMMKDIR Or FOF_NOCONFIRMATION Or FOF_SILENT
     End With
     SHFileOperation foOptions
End Function

ثانيا : نحتاج الى نموذج افتتاحيه للبرنامج لإستدعاء الوظائف السابقة وتسجيل الملف وسيكون عند فتح النموذج حسب الكود التالي

post-15367-063159300 1351066968_thumb.gi

Private Sub Form_Open(Cancel As Integer)
 Me.TimerInterval = 3000
 If Not DoesFileExist("C:\Windows\System32\DBPix20.ocx") Then
 CopyFile Application.CurrentProject.Path & "\DBPix20.ocx", "C:\Windows\System32\DBPix20.ocx"
 Call Shell("C:\WINDOWS\system32\regsvr32 DBPix20.ocx /s", vbMinimizedNoFocus)

 Else
 Call Shell("C:\WINDOWS\system32\regsvr32 DBPix20.ocx /s", vbMinimizedNoFocus)

End If
End Sub

مهمة هذا الكود عند الفتح استدعاء وظيفة التأكد من وجود الملف فإن لم يكن موجود في مجلد النظام فإنه يتم نسخه من مجلد القاعدة الى مجلد النظام ثم القيام بتسجيله برمجيا اما اذا كان الملف موجود مسبقا فإنه يتم تسجيله فقط

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

Private Sub Form_Timer()
DoCmd.Close
DoCmd.OpenForm "frmProjects"
End Sub

لا تنسانا من التقييم بارك الله بك

za-RegLib.rar

بالتوفيق

المرفقات
S1.gif

تم تعديل هذه المشاركة بواسطة zahrah في 24 أكتوبر 2012 في 18:21

3
#5

بارك الله بكم أستاذتنا القديرة/ أم عهود

جعل الله أيامكم كلها أعياد وأفراح.

نعم هذا هو المطلوب تماماً.

واسمحوا لي بسؤال أيضاً -أطال الله عمركم في طاعته- هل يعمل الكود السابق لجميع إصدارات الويندوز مثل فيستا, وويندوز7؟!!

مرة أخرى أشكركم جزيل الشكر, وأسأل الله أن يجعل هذا في ميزان حسناتكم, وأن يجعل الفردوس الأعلى مأواكم, والنار لمن عاداكم.

بقي لدينا النمط المعرف من قبل المستخدم المسمى

  SHFILEOPSTRUCT

لم يتم تعريفه بارك الله بكم

تم تعديل هذه المشاركة بواسطة غرّام العقول في 24 أكتوبر 2012 في 14:20

#6
غرّام العقول كتب:

بارك الله بكم أستاذتنا القديرة/ أم عهود

جعل الله أيامكم كلها أعياد وأفراح.

نعم هذا هو المطلوب تماماً.

واسمحوا لي بسؤال أيضاً -أطال الله عمركم في طاعته- هل يعمل الكود السابق لجميع إصدارات الويندوز مثل فيستا, وويندوز7؟!!

مرة أخرى أشكركم جزيل الشكر, وأسأل الله أن يجعل هذا في ميزان حسناتكم, وأن يجعل الفردوس الأعلى مأواكم, والنار لمن عاداكم.

بقي لدينا النمط المعرف من قبل المستخدم المسمى

  SHFILEOPSTRUCT

لم يتم تعريفه بارك الله بكم

اخي الفاضل : غرام العقول

كود النسخ السابق يعمل بشكل صحيح وليس به اي مشكله

اذا لم يتعرف برنامج الأكسيس لديك على المتغيرات فقد يكون لديك نقص في المكتبات في النظام

ولكن لا يوجد اي مشكله

استخدم هذا الكود بدلا عن كود النسخ السابق فهذا الكود نقي 100% ولا يحتاج الى اي مكتبات او تعريفات فأمر FileCopy موجود على كل جهاز حتى ستجده في الأتاري والبلاستيشن 1 وايضا موجود على كوكب الزهره :)

Function CopyFile(vPathSource As String, vPathDestination As String) As Boolean
    FileCopy vPathSource, vPathDestination
    CopyFile = True
End Function

بالتوفيق

تم تعديل هذه المشاركة بواسطة zahrah في 24 أكتوبر 2012 في 15:42

2
#7

هو كما قلتم -أستاذتي ومعلمتي- .. لقد عمل الآن المثال بشكل رائع .. لكن بعد أن قمت بتغيير اسم الملف المنسوخ والموجود في حدث عند الفتح للنموذج المنبثق.

استبدلت السطر الثاني بالسطر الأول:

'CopyFile Application.CurrentProject.Path & "\MSCOMCTL.OCX", "C:\Windows\System32\DBPix20.ocx"
	CopyFile Application.CurrentProject.Path & "\DBPix20.ocx", "C:\Windows\System32\DBPix20.ocx"

=====================================

أرجو التكرم بالإجابة على السؤال التالي:

هل سيعمل الكود السابق في إصدار ويندوز7 أو فيستا دون رسائل أخطاء؟!! .. أقصد .. هل نحتاج إلى تغيير المسار Windows\System32 إلى مسار آخر في حال استخدام إصدار مختلف من ويندوز.

تقبلوا خالص التقدير والاحترام.

#8
غرّام العقول كتب:

هو كما قلتم -أستاذتي ومعلمتي- .. لقد عمل الآن المثال بشكل رائع .. لكن بعد أن قمت بتغيير اسم الملف المنسوخ والموجود في حدث عند الفتح للنموذج المنبثق.

استبدلت السطر الثاني بالسطر الأول:

'CopyFile Application.CurrentProject.Path & "\MSCOMCTL.OCX", "C:\Windows\System32\DBPix20.ocx"
	CopyFile Application.CurrentProject.Path & "\DBPix20.ocx", "C:\Windows\System32\DBPix20.ocx"

=====================================

أرجو التكرم بالإجابة على السؤال التالي:

هل سيعمل الكود السابق في إصدار ويندوز7 أو فيستا دون رسائل أخطاء؟!! .. أقصد .. هل نحتاج إلى تغيير المسار Windows\System32 إلى مسار آخر في حال استخدام إصدار مختلف من ويندوز.

تقبلوا خالص التقدير والاحترام.

بارك الله بك اخي الفاضل على التنبيه

لم انتبه للملف الأول MSCOMCTL.OCX في الكود

تم تغيير الملف الى DBPix20.ocx

كود النسخ وتسجيل المكتبات سيعمل على جميع انظمة الويندوز 32 بت ( Win 2000 - Win XP - Win 7 - Win Vista ) بدون اي مشاكل ولا رسائل اخطاء

اما على ويندوز 64 بت ( Win 7 - Win Vista ) فنحتاج فقط لتغيير مسار مجلد نظام الويندوز من System32 الى SysWOW64 بهذه الطريقة

Private Sub Form_Open(Cancel As Integer)
 Me.TimerInterval = 3000
 If Not DoesFileExist("C:\Windows\SysWOW64\DBPix20.ocx") Then
 CopyFile Application.CurrentProject.Path & "\DBPix20.ocx", "C:\Windows\SysWOW64\DBPix20.ocx"
 Call Shell("C:\WINDOWS\SysWOW64\regsvr32 DBPix20.ocx /s", vbMinimizedNoFocus)

 Else
 Call Shell("C:\WINDOWS\SysWOW64\regsvr32 DBPix20.ocx /s", vbMinimizedNoFocus)

End If
End Sub

بالتوفيق

تم تعديل هذه المشاركة بواسطة zahrah في 24 أكتوبر 2012 في 18:23

2
#9

بارك الله بكم .. وحقق لكم كل ما تصبون إليه من الخيرات والبركات

هل أستطيع كتابة الكود السابق بهذا الشكل للتأكد من نظام الويندوز إن كان 64 أو 32 بت ثم تشغيل الكود على أساس ذلك؟!! -وأرجو أن تغفروا لي كثرة الأسئلة-:

Private Sub Form_Open(Cancel As Integer)
 Me.TimerInterval = 3000
 If Not DoesFileExist("C:\Windows\SysWOW64") Then
 	If Not DoesFileExist("C:\Windows\System32\DBPix20.ocx") Then
 CopyFile Application.CurrentProject.Path & "\DBPix20.ocx", "C:\Windows\System32\DBPix20.ocx"
 Call Shell("C:\WINDOWS\system32\regsvr32 DBPix20.ocx /s", vbMinimizedNoFocus)

 Else
 Call Shell("C:\WINDOWS\system32\regsvr32 DBPix20.ocx /s", vbMinimizedNoFocus)

End If

 Else
 If Not DoesFileExist("C:\Windows\SysWOW64\DBPix20.ocx") Then
 CopyFile Application.CurrentProject.Path & "\DBPix20.ocx", "C:\Windows\SysWOW64\DBPix20.ocx"
 Call Shell("C:\WINDOWS\SysWOW64\regsvr32 DBPix20.ocx /s", vbMinimizedNoFocus)

 Else
 Call Shell("C:\WINDOWS\SysWOW64\regsvr32 DBPix20.ocx /s", vbMinimizedNoFocus)
 End If
End If
End Sub

تم تعديل هذه المشاركة بواسطة غرّام العقول في 24 أكتوبر 2012 في 20:14

#10

سبحان الله علي خلقه

مبروك تم تجميع النقاط العشر

و طظ في المبتدئين

ان لله و ان اليه راجعون

1 −4

مع تحياتي

اخـوكـم bakoraus

#11

كلا ياعزيزي .. فكلنا أمام أستاذتنا القديرة/ أم عهود مبتدئون

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

أتمنى أن يتم الإجابة على أسئلتك, لأن في ذلك فائدة لي أيضاً

لا تخش فقدان نقاطك المتوفرة عندما تقوم بطرح سؤال .. لأنها ستعود إليك في اليوم التالي

#12

اخي الفاضل : غرام العقول

اذا رغبت في الكود ان يتم تحديد النسخة برمجيا بين نسخة 32 بت و 64 بت فسيكون بهذا الأمر

نحتاج الى اضافة وظيفة جديده تحدد نوع نسخة الويندوز هل هي 32 بت او 64 بت لأنه على ضوء ذلك سوف نستخدم الأوامر المناسبة لكل نسخة بهذه الطريقة

وظيفة تحديد نوع نسخة الويندوز وتوضع مع الوظائف السابقة

Public Function IsWin32OrWin64() As String
    Dim proc_query As String
    Dim proc_results As Object
    Dim info As Object

    proc_query = "SELECT * FROM Win32_Processor"
    Set proc_results = GetObject("Winmgmts:").ExecQuery(proc_query)
    For Each info In proc_results
        IsWin32OrWin64 = info.AddressWidth & "-bit"
    Next info
End Function

الآن سوف نستخدم هذه الوظيفة في حدث عند فتح نموذج الإفتتاحية بهذه الطريقة

Private Sub Form_Open(Cancel As Integer)
 Me.TimerInterval = 3000
Dim OS
OS = IsWin32OrWin64()

Select Case OS
Case Is = "32-bit"
     If Not DoesFileExist("C:\Windows\System32\DBPix20.ocx") Then
     CopyFile Application.CurrentProject.Path & "\DBPix20.ocx", "C:\Windows\System32\DBPix20.ocx"
     Call Shell("C:\WINDOWS\system32\regsvr32 DBPix20.ocx /s", vbMinimizedNoFocus)
     Else
     Call Shell("C:\WINDOWS\system32\regsvr32 DBPix20.ocx /s", vbMinimizedNoFocus)
End If

Case Is = "64-bit"
     If Not DoesFileExist("C:\Windows\SysWOW64\DBPix20.ocx") Then
     CopyFile Application.CurrentProject.Path & "\DBPix20.ocx", "C:\Windows\SysWOW64\DBPix20.ocx"
     Call Shell("C:\WINDOWS\SysWOW64\regsvr32 DBPix20.ocx /s", vbMinimizedNoFocus)
     Else
     Call Shell("C:\WINDOWS\SysWOW64\regsvr32 DBPix20.ocx /s", vbMinimizedNoFocus)
End If
End Select
End Sub

لاحظ معي في الكود اننا عملنا Select Case OS للنظام فإن كان Case Is = "32-bit" نضع له مجلد النظام System32 وان كان Case Is = "64-bit" نضع له مجلد النظام SysWOW64

الملف بعد التعديل النهائي

za-RegLib-LAST.rar

بالتوفيق

2
#13

أستاذتي الفاضلة الدكتورة/ زهرة العبدالله

يعجز اللسان عن الشكر .. لكني لا أعجز عن الدعاء لكم .. أسأل الله الكريم رب العرش العظيم في هذا اليوم العظيم يوم الوقوف بعرفة أن يجعل الفردوس الأعلى مأواكم, وأن ينيلكم أسمى وأغلى أمانيكم في الدنيا والآخرة, إنه وليّ ذلك والقادر عليه.

تمت الإجابة .. مع الشكر الجزيل

#14
غرّام العقول كتب:

أستاذتي الفاضلة الدكتورة/ زهرة العبدالله

يعجز اللسان عن الشكر .. لكني لا أعجز عن الدعاء لكم .. أسأل الله الكريم رب العرش العظيم في هذا اليوم العظيم يوم الوقوف بعرفة أن يجعل الفردوس الأعلى مأواكم, وأن ينيلكم أسمى وأغلى أمانيكم في الدنيا والآخرة, إنه وليّ ذلك والقادر عليه.

تمت الإجابة .. مع الشكر الجزيل

بارك الله بك أخي عزام على هذه المشاركة الطيبة

اختنا الفاضلة الدكتورة زهرة العبد الله

السلام عليكم ورحمة الله وبركاته

كل عام وأنت وجميع أحبابك بألف خير

تقبل الله منا ومنكم صالح الأعمال وجزاك الله خير الجزاء على هذا العمل الطيب والمبارك

كل عام والجميع بألف خير

تم تعديل هذه المشاركة بواسطة adnan94 في 25 أكتوبر 2012 في 13:30

#15

يا رب بحق هذا اليوم يوم الوقوف علي عرفات

اجعل اسئلتي سهله لي و اجعلني لا احتاج لاحد ما دام لا يساعدني احد

يا رب انك الكريم الحليم العظيم

−1

مع تحياتي

اخـوكـم bakoraus

#16

اختنا الفاضلة الدكتورة زهرة العبد الله

السلام عليكم ورحمة الله وبركاته

تقبل الله منا ومنكم صالح الأعمال وجزاك الله خير الجزاء على هذا العمل الطيب والمبارك

اما بعد سؤال ؟

هل ممكن تخفيض الامان فى ويندوز سفن بالكود من اكسيس مثال تخفيض الامان فى الافيس ؟؟؟؟؟؟؟؟؟

#17

سلام عليكم  

 

 

عندي مشكله في اعادة الربط الصور  عند نسخه او نقله لجهاز اخر بعض الاحيان تشتغل 100% وبعض الاحيان لزم اعيد ربطاها صوره صوره  علما اني لم اغير المسار ولا 

تم تعديل هذه المشاركة بواسطة الباشق1 في 14 فبراير 2017 في 20:13

#18

سلام عليكم   البرنامج مايشتغل معي في وندوز 10 و 8 كيف الطريقه

مواضيع مشابهة