لفت انتباهي سؤال لأحد الإخوة في أحد المنتديات حول إنهاء مهمة لذا قررت عمل البريمج التالي من باب التسلية وأحببت مشاركتكم به
- أي نسخة من فيجول ستوديو 2008 ستعمل معنا حتى الـ Express
- أنشئ مشروعا جديدا وسمه ما تشاء
- ضع على النموذج DataGridView وأبق على الاسم الافتراضي DataGridView1 إذا أحببت المتابعة بتسمياتي
- ضع زرين أسفل الـ DataGridView وأعط لأحدهما اسما btnFill واجعل الخاصية Text مساوية لـ Fill و الآخر سمه btnKill واجعل الخاصية Text مساوية لـ Kill
- افتح خصائص MyProject و من الصفحة Application اضغط زر view UAC settings وفي محرر الكود الذي يظهر لك استبدل السطر
requestedExecutionLevel level="asInvoker" uiAccess="false"
بالسطر
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
ثم قم بالحفظ
- في محرر الكود للنموذج Form1 أدخل الكود التالي الذي سيكون هو الكود الكامل لبرنامجنا
Public Class Form1 Private Bs As New BindingSource Private Sub btnFill_Click() Handles btnFill.Click Me.DataGridView1.DataSource = Bs Dim pr = From a In Process.GetProcesses _ Order By a.ProcessName _ Select a.Id, a.ProcessName, a.MainWindowTitle, _ HandlesCount = a.HandleCount, ThreadsCount = a.Threads.Count Me.Bs.DataSource = pr End Sub Private Sub btnKill_Click() Handles btnKill.Click Dim pra = Bs.Current Dim prk = From a In Process.GetProcesses _ Where a.Id = pra.Id _ And a.MainWindowTitle = pra.MainWindowTitle _ Select a For Each p In prk p.Kill() Next btnFill_Click() End Sub End Class
- في البداية عرفنا متغيرا Bs من النوع BindingSource الذي سنستخدمه لربط نتيجة الاستعلام مع DataGridView
- في كود الزر Fill قمنا بربط Bs مع DatagridView ثم كتبنا استعلام Linq ليجلب لنا الحقول التي نريدها من ناتج الطريقة Process.GetProcesses وقمنا بالترتيب حسب ProcessName ثم اخترنا الحقول التي نرغب بإظهارها في شبكة البيانات ثم قمنا بضبط قيمة الخاصية DataSource إلى استعلامنا Pr مما سيسبب إظهار نتيجة الاستعلام في شبكة البيانات
- في كود الزر Kill جلبنا أولا قيمة السطر الذي يقف عنده المؤشر في شبكة البيانات بالحصول على قيمة الخاصية Current لـ Bs ثم كتبنا استعلاما شبيها بالسابق يجلب لنا العمليات التي توافق شرطنا بحيث يكون ID و MainWindowTitle مطابقان ثم قمنا بالدوران خلال نتائج الاستعلام عبر حلقة For ... Each واستخدمنا الطريقة kill لإنهاء العمليات التي يعيدها الاستعلام