الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أغلق برنامج محدد اذا زاد ظهر أكثر من مرة في

بدأه محمد فؤاد تركي في 26 يوليو 2010 · 8 رد · 860 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الساده الزملاء

السلام عليكم ورحمة الله وبركاتة

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

حاولت أن استخدم هذا الكود ولكن ظهر لي هذا الخطأ

post-46243-082329600 1280144765_thumb.jp

post-46243-061505300 1280144777_thumb.jp

المرفقات
1.jpg2.jpg

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#2

المشكلة في الكود السابق أن النتيجة بين الأقواس عبارة عن Boolean True وليست بروسس حتى تقوم بإغلاقها

بإمكانك عمل التالي

        Dim pProcess() As Process = System.Diagnostics.Process.GetProcessesByName("coreftp")
        If pProcess.Length > 1 Then
            pProcess(0).Kill()
        End If

أو بإمكانك عمل فور لوب لإغلاق البروسس الأكثر من واحد إذا كان هناك أكثر من 2 بروسس

سبحان الله وبحمده سبحان الله العظيم

لا تنسونا من صالح دعائكم ...

وفقكم الله وسدد خطاكم ...

#3

يمكنك ذلك باستخدام Process ID لقتل العملية وليس عن طريق Process Name

انظر المرفق يحتوي على برنامج Task Manager متكامل من صنعي

وإذا كان لديك أي سؤال حول الأكواد نتكلم بعد استعراضك للكود

SimpleTaskManager.rar

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#4

بارك الله فيك أخي محمد علي الاجابة الرائعة

فعلا المثال جيد جداً

فكرة الموضوع هو اجبار المستخدم وغلق برنامج معين اذا قام بفتحة أكثر من مرة فتوصلت لهذا الكود لكن اريد ان اضيف عليه تعديل

ارجو ان تساعدني فيه

هو ان يعمل هذا الكود كل 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

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#5

بإمكانك استخدام تحكم 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

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#6

بارك الله فيك أخي الكريم محمد

فعلا الكود رائع ويعمل بشكل سليم لكن فيه مشكلة بسيطة

اذا لم يقم المستخدم بالضغط علي رسالة التنبية التي تظهر أمامة يتم تكرار هذه الرسالة كل 20 ثانية لذلك المطلوب ان تظهر هذه الرسالة مرة واحده فقط وبعد الضغط عليها يتم غلق البرنامج فوراً

حسب الشروط الموضوعة اعلاه

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#7

فقط عدل الكود

        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 نهائيا لا داعي له

#8

بارك الله فيك أخي الكريم

التعديل علي الكود لم يفي بالغرض

بالفعل عند ازالة الرسالة كل شيء يصبح طبيعي وتنحل المشكلة لكن رسالة التنبية مفيده جداً للمستخدم لتنبيه

انظر المشكلة هي تكرار الرسالة التنبيهية في حالة عدم الضغط عليها يعني لو المستخدم حاول تشغيل نسخة اخري وقبل ان تنقضي العشرة ثوان ترك الجهاز وقام سيعود ليجد كم من الراسائل

التنبيهية التي من المؤكد ستعطل جهازه بالكامل عن العمل

post-46243-043473400 1280250657_thumb.jp
المرفقات
1.jpg

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#9

"فكرة" : قم بتعريف متغير بولياني وسمه مثلا "MsgOpen" وعدل على الكود بحيث قبل لاتنفتح الرسالة عطه true وبعد إغلاق الرسالة عطه false

وحط شرط بحيث مايفتح الرسالة إلا إذا كان المتغير يساوي false .. جربها وقلي

118650.jpg

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…