PDA

View Full Version : جلوگیری از اجرای مجدد برنامه



SoheilKH
پنج شنبه 08 آبان 1382, 05:38 صبح
یه برنامه با vb.net نوشتم کامپایل هم شده و ....
در حالی که برنامه در حال اجرا هست .اگر یه بار دیگه برنامه رو اجرا کنم باز هم اجرا میشه .اگر باز هم این کار رو انجام بدم باز هم یه برنامه اجرا میشه :oops:
چیکار باید بکنم تا این جوری نشه :(

mehrzad007
پنج شنبه 08 آبان 1382, 08:19 صبح
این کار با استفاده از توابع apiممکن است. قبلا یکی از دوستان پرسیده بود بگرد اگه پیداش نکردی بگو تا برات بنویسیم...

S.Azish
پنج شنبه 08 آبان 1382, 12:44 عصر
قبلآ در VB 6 با App.PrevInstance میشد چک کرد ولی در Net. از کد زیر استفاده کنید



Visual Basic .NET
Function PrevInstance() As Boolean
If Ubound(Diagnostics.Process.GetProcessesByName(Diag nostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
Return True
Else
Return False
End If
End Function


مرجع MSDN

کم حوصله
جمعه 05 دی 1382, 17:50 عصر
در VB 6 با App.PrevInstance میشد چک کرد

کسی می دونه کد کامل این در وی بی 6 چیه ؟؟ :wink:

ساران سافت
دوشنبه 08 دی 1382, 19:00 عصر
کدش اینه کم حوصله جون:
در اول شروع برنامه ات اینو قرار بده:


if app.prevInstance=true then
end
end if

:| :mrgreen:

marandi
سه شنبه 09 دی 1382, 00:51 صبح
سلام
حتما پایان برنامه بدون Focus بر روی برنامه ای که قبلا فعال شده نمی تواند مفید باشد. فرض کنید چندیدن برنامه بر روی ویندوز باز باشد، پس حتما کاربر برنامه ما را از یاد برده که سعی در اجرای مجدد آن می نماید. (اگر برنامه پیامی را ندهد یا روی برنامه Focus نشود. احتمالا چند فحش قشنگ خواهیم خورد). اما روال کار به صورت زیر است :


'VB6 Code
Public Declare Function FlashWindow Lib "user32" (ByVal hwnd As Long, ByVal bInvert As Long) As Long
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SetActiveWindow Lib "user32" Alias "SetActiveWindow" (ByVal hwnd As Long) As Long

Public Sub Main()
If App.PrevInstance Then
Dim lngHWND As Long
lngHWND = FindWindow(vbNullString, "YourProgramCaption")
Call FlashWindow(lngHWND, True)
Sleep 500
Call FlashWindow(lngHWND, True)
Sleep 500
Call FlashWindow(lngHWND, True)
Call SetActiveWindow(lngHWND)
Else
frmStartup.Show
End If
End Sub


و روال کار در VB.NET به صورت زیر است :


'VB.Net Changes
'Sleep API Changes to : Thread.Sleep
'App.PrevInstance Changes to : ...
Function PrevInstance() As Boolean
If Ubound(Diagnostics.Process.GetProcessesByName(Diag nostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
Return True
Else
Return False
End If
End Function


در ضمن یه نگاهی هم به موضوع (جایگزین توابع API معروف FlashWindow و SetActiveWindow؟) بزن.

(سیدشریفی)
سه شنبه 09 دی 1382, 09:07 صبح
آقای Marandi دستت دردنکنه خیلی خوب بود
:lol: :lol: :lol:

mhaeri
شنبه 02 اسفند 1382, 11:32 صبح
با تشکر آقای مرندی
:تشویق: :flower: