الساده الزملاء
السلام عليكم ورحمة الله وبركاتة
اريد غلق برنامج مفتوح في task manager لكن بشرط اذا كان هذا البرنامج مفتوح أكثر من مرة واحده
حاولت أن استخدم هذا الكود ولكن ظهر لي هذا الخطأ
الساده الزملاء
السلام عليكم ورحمة الله وبركاتة
اريد غلق برنامج مفتوح في task manager لكن بشرط اذا كان هذا البرنامج مفتوح أكثر من مرة واحده
حاولت أن استخدم هذا الكود ولكن ظهر لي هذا الخطأ


المشكلة في الكود السابق أن النتيجة بين الأقواس عبارة عن Boolean True وليست بروسس حتى تقوم بإغلاقها
بإمكانك عمل التالي
Dim pProcess() As Process = System.Diagnostics.Process.GetProcessesByName("coreftp")
If pProcess.Length > 1 Then
pProcess(0).Kill()
End Ifأو بإمكانك عمل فور لوب لإغلاق البروسس الأكثر من واحد إذا كان هناك أكثر من 2 بروسس
سبحان الله وبحمده سبحان الله العظيم
لا تنسونا من صالح دعائكم ...
وفقكم الله وسدد خطاكم ...
يمكنك ذلك باستخدام Process ID لقتل العملية وليس عن طريق Process Name
انظر المرفق يحتوي على برنامج Task Manager متكامل من صنعي
وإذا كان لديك أي سؤال حول الأكواد نتكلم بعد استعراضك للكود
عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه
نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا
ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا
محمد سامر أبو سلو
بارك الله فيك أخي محمد علي الاجابة الرائعة
فعلا المثال جيد جداً
فكرة الموضوع هو اجبار المستخدم وغلق برنامج معين اذا قام بفتحة أكثر من مرة فتوصلت لهذا الكود لكن اريد ان اضيف عليه تعديل
ارجو ان تساعدني فيه
هو ان يعمل هذا الكود كل 20 ثانية طوال اليوم حتي لا نعطي فرصة للمستخدم فتح اكثر من تطبيق واحد
Dim count As Integer
Dim pProcess() As Process = System.Diagnostics.Process.GetProcessesByName("ax32")
count = pProcess.Length
If (pProcess.Length > 1) Then
MsgBox("لا يمكن تشغيل أكثر من نسخة من البرنامج")
For Each p As Process In pProcess
If (count > 1) Then
p.Kill()
End If
count = count - 1
Next
End If
' Me.Dispose()
End Sub

بإمكانك استخدام تحكم Timer لهذا الغرض
كالكود التالي مثلا
Private WithEvents tmr As New Timer With {.Interval = 20000, .Enabled = True}
Private Sub tick() Handles tmr.Tick
Dim count As Integer
Dim pProcess() As Process = System.Diagnostics.Process.GetProcessesByName("ax32")
count = pProcess.Length
If (pProcess.Length > 1) Then
MsgBox("لا يمكن تشغيل أكثر من نسخة من البرنامج")
For Each p As Process In pProcess
If (count > 1) Then
p.Kill()
End If
count = count - 1
Next
End If
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.ShowInTaskbar = False
Me.Visible = False
End Subعن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه
نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا
ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا
محمد سامر أبو سلو
بارك الله فيك أخي الكريم محمد
فعلا الكود رائع ويعمل بشكل سليم لكن فيه مشكلة بسيطة
اذا لم يقم المستخدم بالضغط علي رسالة التنبية التي تظهر أمامة يتم تكرار هذه الرسالة كل 20 ثانية لذلك المطلوب ان تظهر هذه الرسالة مرة واحده فقط وبعد الضغط عليها يتم غلق البرنامج فوراً
حسب الشروط الموضوعة اعلاه


فقط عدل الكود
If (pProcess.Length > 1) Then
MsgBox("لا يمكن تشغيل أكثر من نسخة من البرنامج")
For Each p As Process In pProcess
If (count > 1) Then
p.Kill()
End If
count = count - 1
Next
End Ifإلى
If (pProcess.Length > 1) Then
For Each p As Process In pProcess
If (count > 1) Then
MsgBox("لا يمكن تشغيل أكثر من نسخة من البرنامج")
p.Kill()
End If
count = count - 1
Next
End Ifأو حتى أزل الـ Msgbox نهائيا لا داعي له
بارك الله فيك أخي الكريم
التعديل علي الكود لم يفي بالغرض
بالفعل عند ازالة الرسالة كل شيء يصبح طبيعي وتنحل المشكلة لكن رسالة التنبية مفيده جداً للمستخدم لتنبيه
انظر المشكلة هي تكرار الرسالة التنبيهية في حالة عدم الضغط عليها يعني لو المستخدم حاول تشغيل نسخة اخري وقبل ان تنقضي العشرة ثوان ترك الجهاز وقام سيعود ليجد كم من الراسائل
التنبيهية التي من المؤكد ستعطل جهازه بالكامل عن العمل


"فكرة" : قم بتعريف متغير بولياني وسمه مثلا "MsgOpen" وعدل على الكود بحيث قبل لاتنفتح الرسالة عطه true وبعد إغلاق الرسالة عطه false
وحط شرط بحيث مايفتح الرسالة إلا إذا كان المتغير يساوي false .. جربها وقلي
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…