نویسنده موضوع: جلوگیری از اجرای همزمان برنامه در بیش از یک مورد در vb6 و vb.net  (دفعات بازدید: 2265 بار)

jamesband007

  • مدیریت سایت
  • کاربر جدید
  • *****
  • آفلاین آفلاین
  • ارسال: 31

حتما برنامه هایی را دیده اید که فایل اجرایی آن را زمانی که فایل در حال اجراست نمی توان دوباره اجرا کرد .
اگر شما هم به این ویژگی در برنامه خود نیاز دارید مطلب را تا آخر بخوانید .

vb6  باز ها کد زیر را به ابتدای ()Form_Initialize  یا  ()Form_Load فرم اصلی یا ابتدای startup object  خود اضافه کنند :

If App.PrevInstance = True Then
    MsgBox "Application already open." , , "Message"
    'you can add code to maximize already open instance
    End
End If

vb .net کارها هم که کار راحت تری دارند ، کافی است تیک Make Single Instance Application را در بخش Application از Project Properties را بزنند.
Project Properties از طریق راست کلیک کردن روی نام پروژه در قسمت Solution Explorer  (موجود در قسمت راست Visual Studio .net، اگر نمی بینید Solution Explorer را در منوی View انتخاب کنید) و انتخاب Properties قابل دسترسی است .
« آخرين ويرايش: آوریل 05, 2010, 01:23:33 pm توسط jamesband007 »
خارج شده است

jamesband007

  • مدیریت سایت
  • کاربر جدید
  • *****
  • آفلاین آفلاین
  • ارسال: 31

برای این که با اجرای مجدد فایل اجرایی در حال اجرا ، ویندوز روی برنامه فوکوس کند و اگر در حالت minimize است آن را restore کند ، کد را به صورت زیر تغییر دهید :

    If App.PrevInstance Then
        ActivatePrevInstance
        End
    End If

و یک ماژول با نام دلخواه ایجاد و کد های زیر را داخل آن کپی کنید و تمام :

Option Explicit

Public Const GW_HWNDPREV = 3

Declare Function OpenIcon Lib "user32" (ByVal hwnd As Long) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long

Sub ActivatePrevInstance()
   Dim OldTitle As String
   Dim PrevHndl As Long
   Dim result As Long

   'Save the title of the application.
   OldTitle = App.Title

   'Rename the title of this application so FindWindow
   'will not find this application instance.
   App.Title = "unwanted instance"

   'Attempt to get window handle using VB4 class name.
   PrevHndl = FindWindow("ThunderRTMain", OldTitle)

   'Check for no success.
   If PrevHndl = 0 Then
      'Attempt to get window handle using VB5 class name.
      PrevHndl = FindWindow("ThunderRT5Main", OldTitle)
   End If

   'Check if found
   If PrevHndl = 0 Then
   'Attempt to get window handle using VB6 class name
   PrevHndl = FindWindow("ThunderRT6Main", OldTitle)
   End If

   'Check if found
   If PrevHndl = 0 Then
      'No previous instance found.
      Exit Sub
   End If

   'Get handle to previous window.
   PrevHndl = GetWindow(PrevHndl, GW_HWNDPREV)

   'Restore the program.
   result = OpenIcon(PrevHndl)

   'Activate the application.
   result = SetForegroundWindow(PrevHndl)

   'End the application.
   End
End Sub
خارج شده است