تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
منع تشغيل أكثر من نسخة (Mutex)
#1
كاتب الموضوع : DreamNet

هناك تقنية تسمى Mutual exclusion
أحسن بكثير من PrevInstance
أنشئ كلاس جديدة وأضف هذا الكود داخل كلاس ولنسميها مثلا clsMutex

كود :
[COLOR=#000000][COLOR=#0000bb]Option Explicit
[/COLOR][color=#007700]Private Declare Function [/color][color=#0000bb]CreateMutex Lib [/color][color=#dd0000]"kernel32" [/color][color=#0000bb]Alias [/color][color=#dd0000]"CreateMutexA" [/color][color=#007700]([/color][color=#0000bb]lpMutexAttributes [/color][color=#007700]As [/color][color=#0000bb]SECURITY_ATTRIBUTES[/color][color=#007700], [/color][color=#0000bb]ByVal bInitialOwner [/color][color=#007700]As [/color][color=#0000bb]Long[/color][color=#007700], [/color][color=#0000bb]ByVal lpName [/color][color=#007700]As [/color][color=#0000bb]String[/color][color=#007700]) As [/color][COLOR=#0000bb]Long
[/COLOR][color=#007700]Private Declare Function [/color][color=#0000bb]CloseHandle Lib [/color][color=#dd0000]"kernel32" [/color][color=#007700]([/color][color=#0000bb]ByVal hObject [/color][color=#007700]As [/color][color=#0000bb]Long[/color][color=#007700]) As [/color][COLOR=#0000bb]Long
[/COLOR][color=#007700]Private Declare Function [/color][color=#0000bb]ReleaseMutex Lib [/color][color=#dd0000]"kernel32" [/color][color=#007700]([/color][color=#0000bb]ByVal hMutex [/color][color=#007700]As [/color][color=#0000bb]Long[/color][color=#007700]) As [/color][COLOR=#0000bb]Long

[/COLOR][color=#007700]Private [/color][COLOR=#0000bb]Type SECURITY_ATTRIBUTES
    nLength [/COLOR][color=#007700]As [/color][COLOR=#0000bb]Long
    lpSecurityDescriptor [/COLOR][color=#007700]As [/color][COLOR=#0000bb]Long
    bInheritHandle [/COLOR][color=#007700]As [/color][COLOR=#0000bb]Long
End Type

[/COLOR][color=#007700]Private Const [/color][color=#0000bb]ERROR_ALREADY_EXISTS [/color][color=#007700]= [/color][color=#0000bb]183[/color][COLOR=#007700]&

Private [/COLOR][color=#0000bb]m_hMutex [/color][color=#007700]As [/color][COLOR=#0000bb]Long

[/COLOR][color=#007700]Public Function [/color][color=#0000bb]CheckMutex[/color][color=#007700]([/color][color=#0000bb]MutexName [/color][color=#007700]As [/color][color=#0000bb]String[/color][color=#007700]) As [/color][COLOR=#0000bb]Boolean

Dim S [/COLOR][color=#007700]As [/color][COLOR=#0000bb]SECURITY_ATTRIBUTES

m_hMutex [/COLOR][color=#007700]= [/color][color=#0000bb]CreateMutex[/color][color=#007700]([/color][color=#0000bb]S[/color][color=#007700], [/color][color=#0000bb]0[/color][color=#007700], [/color][color=#0000bb]MutexName[/color][COLOR=#007700])

If [/COLOR][color=#0000bb]Err[/color][color=#007700].[/color][color=#0000bb]LastDllError [/color][color=#007700]= [/color][COLOR=#0000bb]ERROR_ALREADY_EXISTS Then
    CheckMutex [/COLOR][color=#007700]= [/color][COLOR=#0000bb]False
[/COLOR][COLOR=#007700]Else
    [/COLOR][color=#0000bb]CheckMutex [/color][color=#007700]= [/color][COLOR=#0000bb]True
End [/COLOR][COLOR=#007700]If

[/COLOR][color=#0000bb]End [/color][COLOR=#007700]Function

Public [/COLOR][color=#0000bb]Sub CloseMutex[/color][COLOR=#007700]()
[/COLOR][COLOR=#0000bb]ReleaseMutex m_hMutex
CloseHandle m_hMutex
End Sub  
[/COLOR][/COLOR]

في كود تحميل الفورم نكتب الكود التالي :

كود :
[color=#000000][COLOR=#007700]Private [/color][color=#0000bb]Sub Form_Load[/color][COLOR=#007700]()
[/COLOR][color=#0000bb]Set mut [/color][color=#007700]= New [/color][COLOR=#0000bb]clsMutex
[/COLOR][color=#007700]If [/color][color=#0000bb]Not mut[/color][color=#007700].[/color][color=#0000bb]CheckMutex[/color][color=#007700]([/color][color=#dd0000]"MyPrg"[/color][color=#007700]) [/color][COLOR=#0000bb]Then
    MsgBox [/COLOR][COLOR=#dd0000]"Application is running"
    [/COLOR][COLOR=#0000bb]Unload Me
End [/COLOR][COLOR=#007700]If
[/COLOR][COLOR=#0000bb]End Sub  
[/COLOR][/COLOR]

جرب التشغيل حتى بتغيير اسم التطبيق لن تعمل إلا نسخة واحدة من البرنامج

بالتوفيق للجميع
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  مثال تحميل به أكثر من هدية RaggiTech 0 487 17-10-12, 02:27 PM
آخر رد: RaggiTech
  لمعرفة الوقت المستغرق منذ بدأ تشغيل الآلة RaggiTech 0 367 17-10-12, 02:22 PM
آخر رد: RaggiTech
  معرفة الوقت المنقضي منذ بدء تشغيل الكومبيوتر RaggiTech 0 345 17-10-12, 01:05 AM
آخر رد: RaggiTech
  كيفية تشغيل فيديو باستخدام Api ومكتبة Mmsystem.dll RaggiTech 0 375 17-10-12, 12:52 AM
آخر رد: RaggiTech
  طريقة تشغيل شاشة التوقف RaggiTech 0 317 17-10-12, 12:45 AM
آخر رد: RaggiTech
  تشغيل البرنامج بمجرد تشغيل الويندوز RaggiTech 0 587 17-10-12, 12:34 AM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم