PDA

نسخه کامل مشاهده نسخه کامل : چطور می شه از اجرای دوباره برنامه جلوگیری کرد؟



azghanimr
04-08-2006, 12:03
سلام دوستان
اگر برنامه ما در حال اجرا باشد چطور می توان از اجرای مجدد برنامه جلوگیری کرد.

Admiral
04-08-2006, 12:24
یه راهش اینه که با استفاده تابع API این کار رو انجام بدین.

با تابع FindWindow میتونید پنجره ی برنامه مورد نظر رو پیدا کنید.

پس باید در ابتدای برنامه چک بکنید که پنجره ی دیگه ای از برنامه تون باز نباشه و اگه باز بود یک پیغام بدهید و برنامه را ببندید.

موفق باشید.

azghanimr
04-08-2006, 18:04
اگه می شه کامل توضیح بدین لطفا

Ali-Bahal
04-08-2006, 18:43
راست میگه منم لازم دارم

Admiral
04-08-2006, 19:03
سلام

فرض کنید عنوان (Caption) فرم اول برنامه ی شما Form1 باشه.

در ابتدای برنامه شما با تابع FindWindow پنجره ای که این عنوان رو داشته باشه جستجو میکنید.

تابع FindWindow دو پارامتر میگیره. پارامتر اول نام کلاس پنجره ی مورد نظر هست و پارامتر دوم عنوان پنجره.

شما پارامتر اول رو NULL قرار بدین. پارامتر دوم هم که یک رشته هست Form1 باید باشه.

این تابع اگر چنین پنجره ای (پنجره ای با عنوان Form1) پیدا کنه Handle اون پنجره رو برمیگردونه و گرنه NULL رو برمیگردونه.

پس اگه مقدار برگشتی این تابع مخالف NULL بود متوجه می شوید که یک نسخه از برنامه ی شما در حال اجراست. پس اجازه نمی دهید برنامه ی فعلی اجرا بشه.

موفق باشید.

azghanimr
04-08-2006, 19:28
کسی فهمید؟

Admiral
04-08-2006, 19:33
کسی فهمید؟

خیلی واضحه !!!

یعنی متوجه نشدید ؟

Admiral
04-08-2006, 19:41
کجاش رو متوجه نمی شید ؟

فرض کنید برنامه ی شما در حال اجراست پس یک پنجره با عنوان Form1 باز هست.

حالا اگه دوباره روی آیکون برنامه کلیک شد چون یک پنجره با عنوان Form1 وجود داره پس دیگه نباید برنامه اجرا بشه.

همین !

Payman_62
04-08-2006, 22:29
سلام.
این دستور رو تو فرم لود بذار.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ولی اگه از فایل کپی بگیری فایل دوم اجرا میشه.

azghanimr
06-08-2006, 21:45
سلام.
این دستور رو تو فرم لود بذار.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ولی اگه از فایل کپی بگیری فایل دوم اجرا میشه.


آقا پیمان دست درد نکنه دنبال همین بودم.متشکرم

javad_m
12-08-2006, 14:44
مي توني از اين كد هم استفاده كني:

Dim a As Integer

Private Sub Form_Load()
On Error Resume Next
a = GetSetting(App.EXEName, "a", "a", 1)
If a = 1 Then
MsgBox "this program is opened", vbCritical, "error"
End
Else
a = 1
SaveSetting App.EXEName, "a", "a", a
End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
a = 0
SaveSetting App.EXEName, "a", "a", a
End Sub

Payman_62
13-08-2006, 00:18
سلام.
کدت اشکال داره. در ضمن چه کاریه. وقتی یه خط کد جواب میده.
اگه میخوای کاملش کنی بهتره با توابعی مثل findwindow چک کنی که آیا برنامه با این کپشن خاص باز هست یا نه.