03-10-12, 08:46 AM
كاتب الموضوع : samerselo
مقدمةكنا أيام VB6 نستخدم الأمر Shell لتشغيل برنامج خارجي فمثلا لتشغيل الآلة الحاسبة كنا نستخدم الكود
كود :
Shell("calc.exe")
كود :
Process.Start("calc.exe")
ولكن ماذا لو احتجنا لتنفيذ سطر أوامر طويل أو معقد بالطبع ستقولون لي بأنه من الصعب تنفيذه باستخدام أي من الكودين السابقين لهذا أتت الوظيفة 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
تستخدم هذه الفئة لتحديد خصائص العملية التي نريد تشغيلها وهي تمتلك العديد من الخصائص المفيدة التي تساعدنا على القيام بالمهام المختلفة التي يتطلبها تشغيل عملية – برنامج – ما وفيما يلي استعراض لأهم خصائص هذه الفئة
نبدأ أولا بباني الفئة الذي يأتي بثلاثة صيغ
كود :
ProcessStartInfo()
ProcessStartInfo(String)
ProcessStartInfo(String, String)
• 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
كود :
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)
وفيما يلي مثال آخر قد يبدو معقدا قليلا ولكن يمكن شرحه بسهولة باستخدام المعلومات الواردة هنا فقد دار بيني وبين أحد الإخوة نقاش حول بناء الملف التنفيذي للمشروع دون الاعتماد على بيئة التطوير وكان الحل هو باستخدام الأمر 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)