PDA

View Full Version : سوال: اجرا نشدن دو فرم همزمان



Ninja-Assassin
چهارشنبه 13 شهریور 1392, 16:56 عصر
ســـــلام
من میخوام یه برنامه رو که exe میکنیم فقط یکبار اجرا شه یعنی همزمان دو بار اجرا نشه

من با این کد اینکارو کردم..

Private Sub Form_Initialize()
If App.PrevInstance = True Then
MsgBox "This Program Is Running", 16, "Error"
End
End If
End Sub

ولی وقتی برنامه رو یه جا دیگه کپی میکنم یا همون جا کپی میکنم نامشو عوض میکنم دو تا اجرا میشه
من میخوام با کپی کردن تغییر نام اصلا برنامه دو بار اجرا نشه

ممنوووووون

Mr'Jamshidy
چهارشنبه 13 شهریور 1392, 17:09 عصر
فکر میکنم مشکل شما با جستجو حل میشه

مدت زیادی نیست در این مورد بحث شده و به نتیجه هم رسیده

raminshahmoradi
چهارشنبه 13 شهریور 1392, 17:38 عصر
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function CreateMutex Lib "kernel32" Alias "CreateMutexA" (lpMutexAttributes As Any, ByVal bInitialOwner As Long, ByVal lpName As String) As Long
Private Declare Function ReleaseMutex Lib "kernel32" (ByVal hMutex As Long) As Long
Const ERROR_ALREADY_EXISTS = 183&

Private Sub Form_Load()
Call run
End sub

Sub run()
Dim hmt&
hmt = CreateMutex(ByVal 0&, 1, App.Title)

If Err.LastDllError = ERROR_ALREADY_EXISTS Then

msgbox " barname egra ast "
ReleaseMutex hmt
CloseHandle hmt
End

End If

mehran901
پنج شنبه 14 شهریور 1392, 16:40 عصر
و البته به شکل زیر هم میشه :


Option Explicit

Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Const InstanceCode = "A8F500EA:D54F:210F:ED0A:F4A5A20C038C" 'instance delkhah



Public Function PrevInstance() As Boolean

If FindWindow(vbNullString, ByVal InstanceCode) Then

PrevInstance = True
Exit Function

End If

CreateWindowEx 0&, "STATIC", InstanceCode, 0&, 0&, 0&, 0&, 0&, 0&, 0&, App.hInstance, 0&
PrevInstance = False

End Function

Private Sub Form_Load()
If PrevInstance Then
MsgBox "Another instance is running.", vbCritical, "Error"
End
End If
End Sub

Ninja-Assassin
شنبه 16 شهریور 1392, 13:28 عصر
ممنووووووون الان دیگه دو بار اجرا نمیشه مرسیییییی واقعا :X