1 ضمیمه
	
	
		چک کردن باز بودن نسخه ای از برنامه، معرفی یک برنامه برای مانیتورینگ Mutex های بانام
	
	
		سلام.
همون طور که می دونید با استفاده از CreateMutex می تونید کاری کنید که برنامه فقط یک بار ران بشه، به این صورت که سعی می کنید یک میوتکس بسازید و در صورت شکست یعنی قبلا برنامه ران شده. اما اگر بدون اینکه بخواهید میوتکس بسازید، فقط چک کنید ببینید که میوتکس وجود داره یا نه، چاره کار OpenMutex هست.
اما این تابع یکم کارش نیاز به توضیح داره (بعد از کلی ور رفتن و زیر و رو کردن MSDN و مانیتور کردن میوتکس ها)
کار این تابع اینه که چک می کنه ببینه قبلا میوتکسی با نامی که بهش می دید وجود داره یا نه، اگر وجود نداشت صفر بر می گردونه اما اگر وجود داشت،
یک هندل جدید می سازه و به میوتکس مورد نظر اشاره می کنه و هندل رو بهتون می ده.
این یعنی این که هندلی که CreateMutex ساخته با این هندل جدید فرق داره. و این به این معنیه که دیگه CloseHandle کردنش باعث آزاد سازی Mutex نخواهد شد.
چاره کار چیه؟ چاره اینه که موقعی که دارید چک می کنید (با OpenMutex) هندل برگشت داده شده رو همونجا ببندید.
انجام ندادن همین کار کوچیک یکی از سرویس های من رو خوابونده بود.
نمونه کد برای چک کردن وجود یک میوتکس:
function MutexExists(MutexName: PAnsiChar): boolean;
var
  h: THandle;
begin
  Result := false;
  try
    h := OpenMutex(STANDARD_RIGHTS_REQUIRED, false, MutexName);
    Result := h <> 0;
  finally
    try
      CloseHandle(h);
    except
    end;
  end;
end;
اما معرفی یک برنامه،
برنامه Winobj:
با این برنامه می تونید لیستی از میوتکس های رجیستر شده به همراه کلی اطلاعات باارزش دیگه، از جمله درایور ها و سشن ها رو داشته باشید.
با احترام -
	 
	
	
	
		نقل قول: چک کردن باز بودن نسخه ای از برنامه، معرفی یک برنامه برای مانیتورینگ Mutex های بانام
	
	
		حالا اگه بخواهیم هندل Mutex اصلی رو بگیریم و ببندیم، باید چه کنیم.
	 
	
	
	
		نقل قول: چک کردن باز بودن نسخه ای از برنامه، معرفی یک برنامه برای مانیتورینگ Mutex های بانام
	
	
		باید همون خروجی CreateMutex رو نگه داشته باشی :لبخند: و اون رو CloseHandle کنی.
در حقیقت میوتکس یکیه، فقط تعدادی هندل بهش اختصاص پیدا می کنه.
باید همه هندل ها بسته باشند تا میوتکس آزاد بشه.
	 
	
	
	
		نقل قول: چک کردن باز بودن نسخه ای از برنامه، معرفی یک برنامه برای مانیتورینگ Mutex های بانام
	
	
		
	نقل قول:
	
		
		
			
				نوشته شده توسط 
You-See
				 
			باید همون خروجی CreateMutex رو نگه داشته باشی :لبخند: و اون رو CloseHandle کنی.
در حقیقت میوتکس یکیه، فقط تعدادی هندل بهش اختصاص پیدا می کنه.
باید همه هندل ها بسته باشند تا میوتکس آزاد بشه.
			
		
	 
 منظور هندل Mutex یه برنامه دیگست دادا.
	 
	
	
	
		نقل قول: چک کردن باز بودن نسخه ای از برنامه، معرفی یک برنامه برای مانیتورینگ Mutex های بانام
	
	
		شرمنده یوسف جان
حالا اگه بخوایم همون اول میوتکس رو بسازیم که بعد چکش کنیم باید چه کنیم ؟
ببخشید ها ، ما یک کم سواتمون پایینه :لبخند:
	 
	
	
	
		نقل قول: چک کردن باز بودن نسخه ای از برنامه، معرفی یک برنامه برای مانیتورینگ Mutex های بانام
	
	
		با اجازه ::خجالت:
	نقل قول:
	
		
		
			شرمنده یوسف جان
حالا اگه بخوایم همون اول میوتکس رو بسازیم که بعد چکش کنیم باید چه کنیم ؟
ببخشید ها ، ما یک کم سواتمون پایینه
			
		
	 
 یه چیز تو این مایه ها میشه:
function SetMutex: boolean;var
  H: Thandle;
begin
  H := CreateMutex(nil, False, 'Sample');
  result := False;
  If not(WaitForSingleObject(H, 0) <> Wait_TimeOut) then
    result := true;
end;
	 
	
	
	
		نقل قول: چک کردن باز بودن نسخه ای از برنامه، معرفی یک برنامه برای مانیتورینگ Mutex های بانام
	
	
		این Sample همون اسم برنامه هستش دیگه؟
	 
	
	
	
		نقل قول: چک کردن باز بودن نسخه ای از برنامه، معرفی یک برنامه برای مانیتورینگ Mutex های بانام
	
	
		نه. اصلا فرقی نمی کنه چی بدی. در حقیقت شما یک رشته یونیک رو رجیستر می کنی. این رشته برای اطمینان از این که یونیک باشه می تونه مثلا نام برنامه باشه. یا حتی می تونید GUID رو به فرم رشته ای ثبت کنید.
میوتکس تا خاموش شدن سیستم وجود داره مگر این که برنامه ای که اون رو درست کرده بسته بشه یا خودش ببندتش یا این که سایر برنامه ها میوتکس برنامه شما رو بزنن منهدم کنن!