View Full Version : سوال: اجرا نشدن دو فرم همزمان
  
Ninja-Assassin
چهارشنبه 13 شهریور 1392, 17: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, 18:09 عصر
فکر میکنم مشکل شما با جستجو حل میشه
مدت زیادی نیست در این مورد بحث شده و به نتیجه هم رسیده
raminshahmoradi
چهارشنبه 13 شهریور 1392, 18: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, 17: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, 14:28 عصر
ممنووووووون الان دیگه دو بار اجرا نمیشه مرسیییییی واقعا :X
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.