نمایش نتایج 1 تا 8 از 8

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

  1. #1
    کاربر دائمی آواتار SoheilKH
    تاریخ عضویت
    شهریور 1382
    محل زندگی
    haftbit.com
    پست
    315

    جلوگیری از اجرای مجدد برنامه

    یه برنامه با vb.net نوشتم کامپایل هم شده و ....
    در حالی که برنامه در حال اجرا هست .اگر یه بار دیگه برنامه رو اجرا کنم باز هم اجرا میشه .اگر باز هم این کار رو انجام بدم باز هم یه برنامه اجرا میشه :oops:
    چیکار باید بکنم تا این جوری نشه :(

  2. #2
    کاربر دائمی
    تاریخ عضویت
    مرداد 1382
    محل زندگی
    استان فارس
    پست
    1,054
    این کار با استفاده از توابع apiممکن است. قبلا یکی از دوستان پرسیده بود بگرد اگه پیداش نکردی بگو تا برات بنویسیم...

  3. #3
    قبلآ در VB 6 با App.PrevInstance میشد چک کرد ولی در Net. از کد زیر استفاده کنید


    Visual Basic .NET
    Function PrevInstance() As Boolean
    If Ubound(Diagnostics.Process.GetProcessesByName& #40;Diagnostics.Process.GetCurrentProcess.ProcessN ame)) > 0 Then
    Return True
    Else
    Return False
    End If
    End Function


    مرجع MSDN

  4. #4
    کاربر دائمی آواتار کم حوصله
    تاریخ عضویت
    مرداد 1382
    محل زندگی
    ایران - مشهد
    پست
    962
    در VB 6 با App.PrevInstance میشد چک کرد
    کسی می دونه کد کامل این در وی بی 6 چیه ؟؟ :wink:

  5. #5
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    مشهد مقدس
    پست
    416
    کدش اینه کم حوصله جون:
    در اول شروع برنامه ات اینو قرار بده:

    if app.prevInstance=true then
    end
    end if

    :| :mrgreen:

  6. #6
    سلام
    حتما پایان برنامه بدون 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& #40;Diagnostics.Process.GetCurrentProcess.ProcessN ame)) > 0 Then
    Return True
    Else
    Return False
    End If
    End Function


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

  7. #7
    کاربر دائمی آواتار (سیدشریفی)
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    ایران - تبریز
    پست
    468
    آقای Marandi دستت دردنکنه خیلی خوب بود
    :lol: :lol: :lol:

  8. #8
    با تشکر آقای مرندی
    :flower:

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •