ايران ويج

نسخه‌ی کامل: دو سوال در مورد پروسس و اجرای برنامه
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
با توجه به اینکه درمورد سوال قبلیم که لینکش در پایین است با دوستان به نتیجه ای نرسیدیم

http://www.iranvig.com/modules.php?name=...pic&t=2626

من برای رفع مشکل برنامم یه فکری به ذهنم رسید که به کمک شما دوستان نیازمندم

سوال اول : چکار کنم که برنامه بیش از یک بار اجرا نشه ؟
سوال دوم : چجوری با توجه به نام یک پروسس بفهمیم که آن پروسس وجود دارد یا نه و یا به عبارت دیگر برنامه با نام مشخص در ليست پروسس در حال اجرا است یا نه ؟
دوست عزیز برای سوال اولتون یه راه به ذهنم رسید.شما می تونید توی رجیستری یه کلید ایجاد کنید و مقدار اونو 0 قرار بدید و توی قسمت Form_load دو تا کار زیر رو انجام بدید.
اول اینکه در شروع برنامه یه سر به کلید مورد نظر در رجیستری بزنید و مقدار اونو +1 کنید.
بعد یه شرط بزارید که اگر مقدار کلید، در رجیستری به مقدار مورد نظر شما (که در این سوال 1 هست) رسید برنامه دیگه اجرانشه.(unload me )
سوال دوم رو هم بلد نیستم.
App.PrevInstance از این کد استفاده کن و در هنگام اجرای برنامه در if اون رو چک کن
نقل قول: App.PrevInstance از این کد استفاده کن و در هنگام اجرای برنامه در if اون رو چک کن

دمت گرم
اينو چند وقت پيش تو يه سايتي ديده بودم
ولي هر چي فكر كردم چيزي يادم نيومد

ظمنا راه shamsoft جان عملي است ولي وقتي يه
راه ساده تر وجود داره چرا ديگه آدم اين كار كنه
من دنبال اين كد بودم.
از همگي ممنون

حالا سوال دوم موند ؟
ببخشيد ديگه من خيلي وي بي كار نكردم و از اين جور تابع ها بلد نيستم.راهي كه به نظر من رسيد بهتون گفتم و از وجود اون تابع اطلاعي نداشتم.
همين كه به فكري ما هستي مهمه و ارزش داره
خواهش مي كنم.وظيفه است.مگه يادتون رفته چند رو ز پيش چقدر توي سوالات به من كمك كرديد.(چهار تا سوال ساده) :wink:
جواب سوال دو رو هم پيدا كردم و اين پست با موفقيت به اتمام رسيد
تابع تشخيص وجود يك پروسس رو نوشتم اينم كدش؛ اگه كسي مي خواهد استفاده كنه

کد:
Private Function ExistProcess(ProcessName As String) As Long

Dim HSnapshot As Long
Dim Info As PROCESSENTRY32
Dim FirPro As Long
Dim ExeFile As String
Dim TmpPro As String
    
HSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
Info.dwSize = Len(Info)
FirPro = Process32First(HSnapshot, Info)

While FirPro <> 0
   ExeFile = Info.szExeFile
   TmpPro = TmpPro & " " & ExeFile
   Info.dwSize = Len(Info)
   FirPro = Process32Next(HSnapshot, Info)
Wend

CloseHandle HSnapshot

If InStr(TmpPro, ProcessName) <> 0 Then
ExistProcess = 1
End If

End Function

اينم متعلقاتش

کد:
Private Type PROCESSENTRY32
  dwSize As Long
  cntUsage As Long
  th32ProcessID As Long
  th32DefaultHeapID As Long
  th32ModuleID As Long
  cntThreads As Long
  th32ParentProcessID As Long
  pcPriClassBase As Long
  dwFlags As Long
  szExeFile As String * 260
End Type

Private Const TH32CS_SNAPPROCESS = &H2

Private Declare Function CreateToolhelp32Snapshot Lib "kernel32.dll" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32.dll" (ByVal HSnapshot As Long, Uprocess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32.dll" (ByVal HSnapshot As Long, Uprocess As PROCESSENTRY32) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Iron_Fist :
سوال اول : چکار کنم که برنامه بیش از یک بار اجرا نشه ؟

vb_m :
App.PrevInstance از این کد استفاده کن و در هنگام اجرای برنامه در if اون رو چک کن

-------------
سلام
میشه سورس نمونه یا کد اینجا بزارین ؟
من متوجه نشدم
ممنون
دوست عزیز مقدار App.PrevInstance زمانی که یک برنامه قبلا در حال اجرا باشه مقدار True داره در غیر آن صورت مقدارش False هست:

کد زیر رو اولین لاین اجرای برنامت بزار:
If App.PrevInstance then End
به همین سادگی موجب می شید از یک برنامه فقط یکی در حال اجرا باشه !
حواستون باشه باید کامپایل شده برنامرو تست کنید! (چرا؟)
مرسی Biggrin
چون قبل از کامپایل اصلا نمیشه چند بار بازش کرد که تست کرد
-------
این کد در قسمت Form Load باشه ؟!

یا اولین لاین کد کدها ؟!

و یا در بالای بالا
Begin VB.Form Form1
که Caption و غیره مشخص شده ؟!
صفحه‌ها: 1 2