[ Visual Basic 6 ] تشغيل الملفات والتطبيقات عن طريق الفيجوال بيسك

الموضوع في 'قسم فيجوال بيسك 6 و لغة Delphi' بواسطة صبري2010, بتاريخ ‏25 مايو 2009.

تم تحميل الصفحة في 0,3781632 ثانية
  1. صبري2010

    صبري2010 ExpErt DeveloPer

    إنضم إلينا في:
    ‏8 مايو 2009
    المشاركات:
    1,435
    الإعجابات المتلقاة:
    582
    نقاط الجائزة:
    0
    Credits:
    0
    بسم الله الرحمن الرحيم


    أولا: الملفات التنفيذية

    الدالة s h e l l****l
    الدالة ****l هي الدالة التي توفرها لغة فيجوال بيسك لتشغيل التطبيقات.
    الصيغة العامة



    Code

    كود:
    [B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B]l(pathname[,windowstyle])
    القيمة التي تعيدها الدالة:
    صفر في حالة عدم نجاح المهمة و ProcessId (معرف العملية) في حالة النجاح.
    وسيطات الدالة:
    PathName : مسار الملف التنفيذي(التطبيق) المراد تشغيله.
    WindowStyle: طريقة عرض النافذة الاساية للبرنامج.وياخذ هذا الوسيط عدد من الثوابت

    Code

    كود:
    Dim Ret&
    Ret = [B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B]l("notepad.exe", 1)
    'واذا كانت القيمة المعادة ليست ذات قيمة لتطبيقك
    'فيكفي ان تكتب
    ****l "notepad.exe", 1


    الدالة WinExec
    تشبه الدالة السابقة تماما

    التصريح للدالة

    Code

    كود:
    Declare Function WinExec& Lib "kernel32" (ByVal _
    lpCmdLine As String, ByVal nCmdShow As Long
     
    مثال

    Code

    Private Sub Command1_Click()
    Dim Ret&
    Ret = WinExec("Notepad.exe c:Test.txt", vbMaximizedFocus)
    End Sub


    الدالة CreateProcess
    التنفيذية.. ومن الجدير بالذكر هنا أن نقول أن هذه الدالة هي الأصل في جميع الدوال السابقة حيث أن جميع الدوال تعتمد عليها عند انشاء العملية

    التصريح للدالة

    Code
    كود:
     
    Declare Function CreateProcess Lib "kernel32" Alias _
    "CreateProcessA" (ByVal lpApplicationName As String, _
    ByVal lpCommandLine As String, lpProcessAttributes _
    As SECURITY_ATTRIBUTES, lpThreadAttributes As _
    SECURITY_ATTRIBUTES, ByVal bInheritHandles As _
    Long, ByVal dwCreationFlags As Long, lpEnvironment _
    As Any, ByVal lpCurrentDriectory As String, _
    lpStartupInfo As STARTUPINFO, lpProcessInformation _
    As PROCESS_INFORMATION) As Long
     
    ثانيا: كيفية تشغيل الملفات الأخرى


    لا يمكن تشغيل الملفات المرتبطة ببرامج معينه من خلال الدالتين ****l وWinExec مباشرة ولكن يجب علينا تمرير البرنامج المشغل قبل تمرير اسم الملف التشغيلي مثلا لنفترض إننا نريد تشغيل الملف النصي Test.txt والموجود على المجلد الجذري فإننا حينها نقوم نقوم بتمرير البرنامج المشغل وليكن في هذه الحالة notepad فإننا نكتب الكود كالتالي..

    ولعلك تتساءل ألا توجد طريقة للحصول على البرنامج المشغل فالجواب هو نعم .. ولو فكرت سريعا ستجد أو فكرة تخطر على بالك هي استخدام مسجل النظام(الريجيستري) وهذه الطريقة ممتازة وسوف نعتمد على الدالة RegQueryValueEx لقراءة القيمة ورغم ان هذه الطريقة مفيدة وفعالة إلا أنها تعتبر طويلة وتتطلب كتابة إجرائية طويلة للوصول إلى المطلوب.. وهنا يتجلى الحل الآخر من خلال دالة API المسماة FindExecutable
    ولنتوقف قليلا عند هذه الدالة لنقوم بشرح جوانبها لارتباطها بالموضوع..
    الوظيفة:
    إيجاد البرنامج المشغل لملف معين

    التصريح للدالة
    Code

    كود:
    Declare Function FindExecutable Lib "[B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B]l32.dll" Alias _
    "FindExecutableA" (ByVal lpFile As String, ByVal _
    lpDirectory As String, ByVal lpResult As String) _
    As Long


    لائحة الوسيطات:
    lpFile : اسم الملف المراد تشغيله.
    lpDirectory : مسار الملف السابق.
    lpResult : متغير لتخزين مسار البرنامج المشغل.
    والآن سنقوم بعمل دالة عند تمرير ملف لها فإنها ستقوم بايجاد البرنامج المشغل... ومن ثم تشغيل الملف


    Code

    Private Declare Function FindExecutable Lib "****l32.dll" _
    Alias "FindExecutableA" (ByVal lpFile As String, ByVal _
    lpDirectory As String, ByVal lpResult As String) _
    As Long
    Sub ****lFile(FileName As String)
    Dim Byt_Pos As Byte, str_Buf As String * 256
    Dim lpFile$, lpDirectory$
    Byt_Pos = InStr(StrReverse(FileName), "")
    'استخراج اسم الملف
    lpFile = Right(FileName, Byt_Pos - 1)
    'اسم المجلد
    lpDirectory = Left(FileName, Len(FileName) - Byt_Pos)
    'الحصول على البرنامج المشغل
    FindExecutable lpFile, lpDirectory, str_Buf
    'استخلاص اسم ومسارالبرنامج المشغل من القيمة الموجودة في المخزن

    كود:
    str_Buf = Mid(str_Buf, 1, InStr(str_Buf, Chr(0)) - 1)
    [B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B]l str_Buf & " " & FileName, 1
    End Sub
    Private Sub Command1_Click()
    [B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B]lFile "c:Test.txt"
    End Sub
     


    ما رأيك الآن .. اليس هذا جميلا .... لقد استطعت أن تقوم بتشغيل مختلف أنواع الملفات ولكن للاسف تحتاج لمزيد من الاكواد إذا كنت لاتعلم هل الملف تنفيذي ام ملف مقترن .... يكمن المخرج من هذا المأزق في استخدام الدالة ****lExecute لتشغيل كافة أنواع الملفات التنفيذية والملفات المرتبطة ببرنامج معين ..

    ثالثا: تشغيل كافة أنواع الملفات



    الدالة ****lExecute
    تشغيل كافة انواع الملفات القابلة للتشغيل أوطباعتها حيث انه عندما يكون الملف عبارة عن ملفا مقترنا فإن الدالة تستخرج البرنامج المشغل ثم تقوم بتشغيله

    التصريح للدالة

    Code

    كود:
    Declare Function [B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B]lExecute Lib "[B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B]l32.dll" Alias _
    "[B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B]lExecuteA" (ByVal hwnd As Long, ByVal lpOperation _
    As String, ByVal lpFile As String, ByVal lpParameters _
    As String, ByVal lpDirectory As String, ByVal nShowCmd _
    As Long) As Long

    وسيطات الدالة:
    hwnd : مقبض النافذة.
    lpOperation : احدى المعاملين "Print" للطباعة و "Open" للفتح.
    lpFile : اسم الملف لمراد تطبيق العملية عليه.
    lpParameters : الوسيطات المراد تمريرها إلى جوار اسم الملف (في حال وجودها).
    lpDirectory : اسم المجلد الذي يقع عليه الملف .. ويتم تمرير القيمة vbNullString (سلسلة محارف صفرية) في حال تم تمرير المسار كاملا إلى الوسيطة lpFile .
    nShowCmd :مطابقة للوسيطة windowstyle التابعة للدالة ****l .
    القيمة اللتي تعيدها الدالة:
    تكون اكبر من 32 عندما تنجح العملية وعندما يحدث عكس ذلك فأن الدالة تعيد قيما أقل ويمكن تتبع مصدر الخطأ من خلال هذه القيم

    مثال لتشغيل الملفات التنفيذية

    Code

    كود:
    [B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B]lExecute hwnd, "Open", "Calc.exe", _
    vbNullString, vbNullString, 3


    مثال لتشغيل الملفات مقترنة

    في هذا المثال سأوضح جملة من شيفرات الخطأ التي تصدر عن الدالة في حالة عدم النجاح ومالذي تعنيه كل قيمه

    Code

    كود:
    Private Declare Function [B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B]lExecute Lib "[B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B]l32.dll" Alias _
    "[B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B]lExecuteA" (ByVal hwnd As Long, ByVal lpOperation _
    As String, ByVal lpFile As String, ByVal lpParameters _
    As String, ByVal lpDirectory As String, ByVal nShowCmd _
    As Long) As Long
    Sub [B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B]lDocument(FileName As String)
    Dim Ret&
    Ret = [B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B]lExecute(hwnd, "Open", FileName, "", "", 1)
    If Ret <= 32 Then
    Select Case Ret
    Case 2&
    MsgBox "الملف غير موجود"
    Case 3&
    MsgBox "المسار غير موجود"
    Case 5&
    MsgBox "تعذر الوصول"
    Case 8&
    MsgBox "ذاكرة غير كافية"
    Case 11&
    MsgBox "هناك خلل في الملف التنفيذي"
    Case 32&
    MsgBox "مكتبة الربط غير موجودة"
    Case 31&
    MsgBox "لايوجد برنامج مقترن بهذا الامتداد"
    Case Else
    MsgBox "خطأ غير معرف في هذا المثال"
    End Select
    End If
    End Sub
    
    Private Sub Command1_Click()
    [B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B][B][COLOR="Red"]*[/COLOR][/B]lDocument "C:Test.txt"
    End Sub
     
     
  2. صبري2010

    صبري2010 ExpErt DeveloPer

    إنضم إلينا في:
    ‏8 مايو 2009
    المشاركات:
    1,435
    الإعجابات المتلقاة:
    582
    نقاط الجائزة:
    0
    Credits:
    0
    رد: تشغيل الملفات والتطبيقات عن طريق الفيجوال بيسك

    عزراا مكان النجوم التي تظهر في الاكواد نكتب كلمة s h e l l ****l
    او نأخذ الكود كوبي بيست
     
    1 person likes this.
  3. Funny Logic

    Funny Logic VIP DeveloPer

    إنضم إلينا في:
    ‏9 مايو 2008
    المشاركات:
    2,581
    الإعجابات المتلقاة:
    186
    نقاط الجائزة:
    63
    الإقامة:
    jordan
    Credits:
    9
    رد: تشغيل الملفات والتطبيقات عن طريق الفيجوال بيسك

    يعطيك الف الف عافية يا رب ... :9:


    مبدع يا غاالي.. :9:
     
  4. ξѝơɗ

    ξѝơɗ ExpErt DeveloPer

    إنضم إلينا في:
    ‏26 ابريل 2009
    المشاركات:
    3,105
    الإعجابات المتلقاة:
    152
    نقاط الجائزة:
    0
    Credits:
    0
    رد: تشغيل الملفات والتطبيقات عن طريق الفيجوال بيسك

    مشكور جدا

    بس عندي استفسار بسيط

    أكتب بدال الستارز

    s h e l < صحيح الـ سبيلينق بتاعها ؟؟

    أنتظر ردك خيوو

    ويعطيك 1000 عافية
     
  5. صبري2010

    صبري2010 ExpErt DeveloPer

    إنضم إلينا في:
    ‏8 مايو 2009
    المشاركات:
    1,435
    الإعجابات المتلقاة:
    582
    نقاط الجائزة:
    0
    Credits:
    0
    رد: تشغيل الملفات والتطبيقات عن طريق الفيجوال بيسك

    نكتبها اخي هكذا
    s h e l l
    هكذا اخي بس هذه الكلمة تحول الي نجوم في المنتديات

    بارك الله فيك على ردك​
     
  6. ξѝơɗ

    ξѝơɗ ExpErt DeveloPer

    إنضم إلينا في:
    ‏26 ابريل 2009
    المشاركات:
    3,105
    الإعجابات المتلقاة:
    152
    نقاط الجائزة:
    0
    Credits:
    0
    رد: تشغيل الملفات والتطبيقات عن طريق الفيجوال بيسك

    يعطيك العافية

    مشكور عالرد

    <- تعتبرك من أساتذتها في الـ vb

    وماراح أنسى هالمجهود منك اللي استفدت منه كثير

    جزيت خير الجزاء
     

مشاركة هذه الصفحة

جاري تحميل الصفحة...