تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
تشغيل برنامج خارجي أو فتح ملف مرتبط ببرنامج معين من ضمن كود فيجول بايزيك دوت نيت
#1
كاتب الموضوع : samerselo

مقدمة
كنا أيام VB6 نستخدم الأمر Shell لتشغيل برنامج خارجي فمثلا لتشغيل الآلة الحاسبة كنا نستخدم الكود

كود :
Shell("calc.exe")
ولكن مع تطور لغة البايزك ومع قدوم الدوت نيت تم تقديم طريقة جديدة لتشغيل برنامج خارجي عن طريق Process.Start حيث يمكننا تشغيل الآلة الحاسبة باستخدام الوظيفة الجديدة وبكود مكافئ للكود السابق

كود :
Process.Start("calc.exe")
إضافة إلى أن الأمر Shell موجود ضمن مجال الأسماء Microsoft.VisualBasic الموجود بغرض التوافقية المرجعية مع VB6 ولاينصح باستخدام الأوامر الموجودة في مجال الأسماء المذكور وذلك لتوفر بدائل أفضل وأكثر قوة عن تلك الموجودة فيه إضافة إلى أننا لانضمن متى تقوم مايكروسوفت بإلغاء دعم التوافقية مع VB6
ولكن ماذا لو احتجنا لتنفيذ سطر أوامر طويل أو معقد بالطبع ستقولون لي بأنه من الصعب تنفيذه باستخدام أي من الكودين السابقين لهذا أتت الوظيفة Process.Start بعدة أشكال وذلك لتلبية متطلبات المبرمج المختلفة وفيما يلي بعض الأمثلة عن الوظيفة Start

كود :
' Start Internet Explorer. Defaults to the home page.
Process.Start("IExplore.exe")

' Start a Web page using a browser associated with .html and .asp files.
Process.Start("IExplore.exe", "C:\myPath\myFile.htm")

' Open web site using IE
Process.Start("IExplore.exe", "www.aya.sy")

' OpenWithStartInfo()
Dim startInfo As New ProcessStartInfo("IExplore.exe")
startInfo.WindowStyle = ProcessWindowStyle.Minimized
Process.Start(startInfo)
startInfo.Arguments = "www.northwindtraders.com"
Process.Start(startInfo)
نلاحظ من المثال الأول أننا قمنا بتمرير اسم البرنامج فقط للوظيفة حتى يتم تشغيله وفي المثال الثاني نريد تمرير ملف للمتصفح ليفتحه فقمنا بتمرير اسم الملف التنفيذي لمتصفح الانترنت في المحدد الأول للوظيفة وفي المحدد الثاني نضع محددات سطر الأوامر الخاصة بالبرنامج الذي نريد تشغيله – متصفح الانترنت - وفي مثالنا هنا اسم الملف الذي نريد فتحه مع مساره الكامل وقد نريد فتح موقع انترنت محدد فعندها نضبط قمية المحدد الثاني إلى عنوان ذلك الموقع كما في المثال الثالث وفي المثال الأخير قمنا بتمرير متغير من النوع ProcessStartInfo للوظيفة Start كمحدد وحيد وذلك بعد ضبط الخصائص المناسبة فقد تم تمرير اسم البرنامج كمحدد للباني ثم تم تحديد قيمة الخاصية WindowStyle إلى Minimized وذلك يؤدي إلى تشغيل البرنامج بنافذة مصغرة وتم تحديد قيمة الخاصية Arguments التي تستخدم لتمرير محددات سطر الأوامر إلى التطبيق المراد تشغيله إلى عنوان الموقع الذي نريد فتحه
الفئة ProcessStartInfo
تستخدم هذه الفئة لتحديد خصائص العملية التي نريد تشغيلها وهي تمتلك العديد من الخصائص المفيدة التي تساعدنا على القيام بالمهام المختلفة التي يتطلبها تشغيل عملية – برنامج – ما وفيما يلي استعراض لأهم خصائص هذه الفئة
نبدأ أولا بباني الفئة الذي يأتي بثلاثة صيغ

كود :
ProcessStartInfo()
ProcessStartInfo(String)
ProcessStartInfo(String, String)
فالصيغة الأولى تستخدم لإنشاء متغير من النوع ProcessStartInfo دون أن يتم تمرير أي قيمة لها والثانية يتم تمرير قيمة نصية وحيدة لها هي عبارة عن اسم العملية أو الملف التنفيذي للتطبيق المراد تشغيله والصيغة الأخيرة يتم تمرير محددين نصيين لها الأول عبارة عن اسم العملية أو الملف التنفيذي للتطبيق والمحدد الثاني عبارة عن محددات سطر الأوامر الخاصة بالتطبيق المراد تشغيله. وفيما يلي سرد لأهم خصائص الفئة ProcessStartInfo
• Arguments تحمل قيمة نصية تمثل محددات سطر الأوامر للتطبيق الذي نريد تشغيله
• CreateNoWindow هي قيمة منطقية تشير إلى هل يجب أن يتم تشغيل التطبيق في نافذة جديدة وتكون قيمتها الافتراضية False
• ErrorDialog وهي عبارة عن قيمة منطقية تحدد وجوب إظهار رسالة خطأ في حالة عدم التمكن من تشغيل العملية
• FileName وهي قيمة نصية تحدد اسم ملف البرنامج أو الوثيقة التي سيتم تشغيلها
• LoadUserProfile وهي قيمة منطقية تحدد فيما إذا كان يجب أن يتم تحميل التشكيل الجانبي للمستخدم من سجل النظام
• Password وهي سلسلة نصية تحوي على كلمة السر المستخدمة لبدء العملية
• UserName وهي قيمة نصية تحوي اسم المستخدم المستخدم لبدء العملية
• UseShellExecute وهي قيمة منطقية تحدد فيما إذا كان سيتم استخدام قشرة النظام System Shell لبدء العملية وقيمتها الافتراضية True
• Verb وهي قيمة نصية تحدد العمل الذي سيتم تنفيذه عند بدء العملية والقيمة الافتراضية سلسلة نصية فارغة وفي حالة كونها فارغة يتم تنفيذ العمل الافتراضي المرتبط بذلك الملف
• Verbs وهي عبارة عن مصفوفة قيم نصية تشكل قائمة بالأعمال المرتبطة مع الملف المحدد في الخاصية FileName
• WindowStyle وهي تحمل قيمة ProcessWindowStyle تحدد كيف سيتم إظهار النافذة ويكون لها إحدى القيم Normal أو Hidden أو Minimized أو Maximized
• WorkingDirectory وهي سلسلة نصية تتضمن مسار مجلد العمل الخاص بالتطبيق الذي سيتم تشغيله
ويمكنك الإطلاع على باقي خصائص الفئة ProcessStartInfo من مكتبة MSDN المرفقة مع فيجول ستوديو أو من موقع MSDN الخاص بمايكروسوفت
استخدام ProcessStartInfo مع Process.Start عمليا
لطباعة مستند نصي مثلا إلى الطابعة يمكننا استخدام الكود التالي الذي نحدد فيه الخاصية FileName إلى اسم ملف نصي متواجد في مكان ما على القرص ونحدد الخاصية Verb إلى القيمة Print ثم نستدعي Process.Start

كود :
Dim Psi As New ProcessStartInfo
With Psi
.FileName = "D:\Temp\UNTITLED.TXT"
.Verb = "print"
End With
Process.Start(Psi)
ولإظهار الأعمال المرتبطة بهذا الملف

كود :
For Each ve In Psi.Verbs
MsgBox(ve.ToString)
Next
ولفتح الملف عوضا عن طباعته نغير قيمة الخاصية Verb في الكود السابق إلى Open كما يلي

كود :
Dim Psi As New ProcessStartInfo
With Psi
.FileName = "D:\Temp\UNTITLED.TXT"
.verb = "open"
End With
Process.Start(Psi)
ولفتح ملف نصي باستخدام المفكرة وجعل نافذة المفكرة في وضع التكبير نستخدم الكود التالي

كود :
Dim Psi As New ProcessStartInfo
With Psi
.FileName = "Notepad.exe"
.Arguments = "D:\Temp\UNTITLED.TXT"
.WindowStyle = ProcessWindowStyle.Maximized
End With
Process.Start(Psi)
حيث حددنا اسم الملف التنفيذي للتطبيق – المفكرة هنا – في الخاصية FileName وحددنا اسم الملف الذي نريد فتحه في الخاصية Arguments الخاصة بمحددات سطر الأوامر للتطبيق المذكور اسمه في الخاصية FileName ثم حددنا أن المفكرة يجب أن يتم تشغيلها في وضع تكبير النافذة للحد الأقصى وذلك بضبط الخاصية WindowStyle إلى القيمة ProcessWindowStyle.Maximized ثم قمنا ببدء التطبيق – المفكرة – وذلك باستدعاء الوظيفة Process.Start ممررا لها محددا وحيدا هو Psi الذي عرفناه من النوع ProcessStartInfo
وفيما يلي مثال آخر قد يبدو معقدا قليلا ولكن يمكن شرحه بسهولة باستخدام المعلومات الواردة هنا فقد دار بيني وبين أحد الإخوة نقاش حول بناء الملف التنفيذي للمشروع دون الاعتماد على بيئة التطوير وكان الحل هو باستخدام الأمر MSBuild الذي يأتي مع الفريموورك وهذا الأمر له العديد من محددات بدء التشغيل ونريد أن نقوم بالتنفيذ بشكل مخفي ثم نقوم بإظهار ملف نتيجة عملية البناء بعد إنتهائها وهذا هو الكود مدعما ببعض التعليقات باللغة العربية

كود :
' جلب مجلد الويندوز
Dim windir = System.Environment.ExpandEnvironmentVariables("%SYSTEMROOT%")

' تحديد متغير معلومات بدء تشغيل العملية
Dim pri As New ProcessStartInfo
With pri
' تحديد مجلد العمل
.WorkingDirectory = "D:\Temp\DisksArchive"
' تحديد الأمر الذي نود تنفيذه
.FileName = windir & "\Microsoft.NET\Framework\v3.5\MSBuild.exe"
' تحديد محددات سطر الأوامر من إنشاء ملف بالنتيجة وتحديد اسم المشروع الذي ستتم ترجمته
.Arguments = "/l:FileLogger,Microsoft.Build.Engine;logfile=ActivityLog.txt DisksArchive.sln"
' تحديد أن نافذة التشغيل ستكون مخفية كي لايرى المستخدم نافذة الكونسول
.WindowStyle = ProcessWindowStyle.Hidden
End With
' بدء تشغيل العملية
Dim pr = Process.Start(pri)
' انتظار العملية حتى يكتمل تنفيذها وتخرج
pr.WaitForExit()
' تغيير المحددات كي نظهر ملف النتائج
With pri
' تحديد أن البرنامج الذي سينفذ هو المفكرة
.FileName = Environment.SystemDirectory & "\notepad.exe"
' تحديد اسم الملف الذي نود فتحه
.Arguments = "ActivityLog.txt"
' تحديد أن النافذة يجب أن تظهر بالوضع الطبيعي
.WindowStyle = ProcessWindowStyle.Normal
End With
' بدء تشغيل العملية
Process.Start(pri)
النقطة الوحيدة في هذا الكود الغير مشروحة هنا هو أن الوظيفة Process.Start عند نجاحها في بدء تشغيل العملية تعيد قيمة من النوع System.Diagnostics.Process حيث نضع هذه القيمة في متغير يمكننا من الاستفادة من خصائص الفئة Process المعادة وهنا استخدمنا الوظيفة WaitForExit التي توقف تنفيذ الكود حتى تنتهي العملية من التنفيذ وتخرج وبعدها يتم معاودة تنفيذ باقي أسطر الكود كما يمكننا الاستفادة من العديد من الخصائص الأخرى للفئة Process مثل ExitCode التي تعيد القيمة المعادة من العملية عند انتهائها
}}}
تم الشكر بواسطة:
#2

أمثلة إضافية


إذا أردنا فتح موقع على الويب باستخدام المتصفح الافتراضي

باستخدام Process.start يمكننا عمل ذلك مباشرة

كود :
Process.Start("www.aya.sy")
وبطريقة ProcessStartInfo

كود :
Process.Start(New ProcessStartInfo("www.aya.sy"))
والسبب في ذلك أن الوظيفة Process.Start ذكية بحيث يمكنها تشغيل أي ملف - وثيقة وورد مثلا أو عنوان موقع انترنت - باستخدام البرنامج الافتراضي المرتبط به مباشرة
فلكي نقوم بفتح ملف docx مثلا باستخدام البرنامج الافتراضي المرتبطه به وهو في هذه الحالة Word 2007 يكفي أن نمرر اسم الملف مع المسار الكامل له

كود :
Process.Start("C:\Users\SamerSelo\Documents\أطباق متنوعة.docx")
إذا أردنا إرسال بريد الكتروني لبريد ما مثلا "info@aya.sy" يمكننا عمل ذلك أيضا باستخدام Process.Start الذي يفتح لنا محرر البريد الالكتروني الافتراضي عند تمرير عنوان البريد الالكتروني لتلك الوظيفة مثال

كود :
Process.Start("mailto:info@aya.sy")
}}}
تم الشكر بواسطة: rohaem2020


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [مشروع] حل مشكلة الترقيم التلقائي بعد حذف سجل معين mohammed alnour 9 13,821 13-01-23, 04:16 PM
آخر رد: اسلام الكبابى
  [مقال] صدور فيجول ستوديو 2022 alfaiz678 3 3,530 25-11-22, 03:21 PM
آخر رد: kebboud
  كيف تتعامل مع برنامج الإكسيل من برنامجك rinawi 7 6,647 12-11-22, 12:11 AM
آخر رد: خالد العصاوي
  نظرة على DropBox SDK و التعامل معها +برنامج رفع و تحميل ملفات ابو ليلى 4 4,883 08-09-22, 11:54 AM
آخر رد: saif2023
  برنامج مبيعات ومشتريات وإدارة أعمال ( الفاتورة الإلكترونية ) yassoo1985 2 2,263 04-06-22, 01:14 PM
آخر رد: yassoo1985
Heart طلب برنامج Advanced Installer أبو خالد الشكري 0 1,419 16-05-22, 09:12 PM
آخر رد: أبو خالد الشكري
  جمع قيم عمود معين فى datagridview الجندى 8 8,318 15-05-22, 10:27 PM
آخر رد: ابراهيم ايبو
  أهم طرق إدارة المخازن وتطبيقها على برنامج مخازن وارد ومنصرف Menna ahmeed 0 1,992 27-04-22, 12:52 PM
آخر رد: Menna ahmeed
  طريقة إنشاء برنامج طباعة ملصقات الباركود ملهمـ 1 4,408 22-12-21, 05:09 PM
آخر رد: alessam4pro
  طريقة تشغيل كريستال ريبورت بجميع ادارات فيجول نت abdhassan 3 7,078 26-02-21, 08:57 PM
آخر رد: علي النقيب

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم