02-10-12, 03:59 PM
كاتب الموضوع : samerselo
الخاصية CommandLineArgsيمكننا التعامل مع محددات سطر الأوامر من خلال الخاصية CommandLineArgs التي تعيد مجموعة نصية للقراءة فقط ReadOnly Collection Of String تحتوي على محددات سطر الأوامر وتكون صيغتها العامة على الشكل
كود :
Public ReadOnly Property CommandLineArgs() As ReadOnlyCollection(Of String)
وتجدر ملاحظة أنه عند تشغيل عدة نسخ من التطبيق في آن واحد فإن هذه الخاصية تعيد القيم الخاصة بأول مرة تم تشغيل البرنامج فيها وللحصول على محددات سطر الأوامر للمرات التالية التي تم تشغيل البرنامج فيها علينا معالجة الحدث My.Application.StartupNextInstance وفحص الخاصية CommandLine العائدة لـ StartupEventArgs – وهنا أنصحك بمراجعة موضوعي أحداث التطبيق – وتجدر ملاحظة الاختلاف بين الخاصية CommandLineArgs التي تعيد محددات سطر الأوامر فقط والخاصية CommandLine التي تعيد سطر الأوامر التي تفذ من خلاله التطبيق كاملا بما فيه اسم الملف التنفيذي للتطبيق
وهذه الخاصية ليست متوفرة لجميع أنواع التطبيقات التي يمكنك إنشاؤها فهي متوفرة لأنواع التطبيقات التالية فقط Windows Application و Console Application و Windows Service فقط وقد تحتاج في بعض الحالات للفئة EnvironmentPermission من أجل الحصول على الصلاحيات الكافية لقراءة محددات سطر الأوامر من خلال هذه الخاصية وربما سأقوم مستقبلا بعمل موضوع مستقل عن الفئة EnvironmentPermission
أمثلة عن الاستخدام
إذا أردنا معالجة محدد ما المفترض أن يمرر عبر سطر الأوامر /input= مثلا يمكننا استخدام الكود التالي لإظهار بقية القيمة الممررة
كود :
Private Sub ParseCommandLineArgs()
Dim inputArgument As String = "/input="
Dim inputName As String = ""
For Each s As String In My.Application.CommandLineArgs
If s.ToLower.StartsWith(inputArgument) Then
inputName = s.Remove(0, inputArgument.Length)
End If
Next
If inputName = "" Then
MsgBox("No input name")
Else
MsgBox("Input name: " & inputName)
End If
End Sub
كود :
For Each cr In My.Application.CommandLineArgs
HandleArgs(cr.ToUpper)
Next
Private Sub HandleArgs(ByVal carg As String)
Select Case carg
Case "/S"
' معالجة المحدد /S
Case "/T"
' معالجة المحدد /T
Case Else
' معالجة أي محدد آخر
End Select
End Sub
كود :
Private Sub MyApplication_StartupNextInstance( _
ByVal sender As Object, _
ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs _
) Handles Me.StartupNextInstance
Dim inputArgument As String = "/input="
Dim inputName As String = ""
For Each s As String In e.CommandLine
If s.ToLower.StartsWith(inputArgument) Then
inputName = s.Remove(0, inputArgument.Length)
End If
Next
If inputName = "" Then
MsgBox("No input name")
Else
MsgBox("Input name: " & inputName)
End If
End Sub