تبلیغات
برنامه نویسی و الکترونیک - اجرای برنامه فقط یک بار در هر بار اجرای ویندوز ! ( دلفی )
 
منوی اصلی


--------------------------

--------------------------

--------------------------

--------------------------


سفارش پروژه

E-Mail :
Mahmood_Mehri@Hotmail.com

سایت برنامه نویس :  Mahmood_M


موضوعات

دانلود نرم افزار
 
تخصصی برنامه نویسی
  تخصصی برق ( الکترونیک )
  کامپوننت ها و ابزارها
  نرم افزارهای متفرقه
برنامه نویسی
  مباحث عمومی
  آموزش Delphi

  آموزش زبان C++ / C
 
آموزش Matlab

  آموزش زبان Assembly
  آموزش DataBase

الکترونیک
  مباحث عمومی
  مباحث عمومی الکترونیک
  معرفی قطعات الکترونیکی
  کار با مولتی متر
  مدارات الکترونیک
  میکروکنترلر
  میکروکنترلرهای AVR
  پروژه ها
مباحث متفرقه
  آموزشهای متفرقه
  معرفی سایت
  معرفی کتاب
  پاسخ به سئوالات
  مطالب عمومی


لینك دوستان
:: جک :: اس ام اس :: عکس
:: الکترونیک 89 گیلان
:: سورسهای نرم افزاری
:: اینترنت بدون تحریم
:: علمی.کتاب.مجله.نرم افزار.مقاله
:: مبارزات آزاد
:: برنامه نویسی از اهل زمین
:: :: جزیره ی دانلود ::
:: :: کامپیوتر و IT ::
:: بزرگترین پایگاه مدل لباس اینترنتی
:: مرکز دانلود ایرانیان
:: پایگاه علمی مهندسی تراشه
:: تمامی راهکارهای کامپیوتری
:: برنامه نویسی و طراحی وب
:: خرید ساعت دیواری
:: :: فناوری روز ::
:: :: همه چیز واسه موبایل ::
:: آموزش تخصصی کامپیوتر
:: * پیاز داغ اینترنت ! *
:: جدیدترین موزیکها و نرم افزارها
:: دانلود سورس ویژوال بیسیک
:: امپراطور دانلود و آموزش
:: موبایل و کامپیوتر
:: جدیدترین آهنگهای هفته
:: درباره ی دلفی !
:: برنامه نویس
:: پروژه های رایگان و آموزش ++C
:: ابراهیم آنلاین

 : " اجرای برنامه فقط یک بار در هر بار اجرای ویندوز ! ( دلفی ) " :
 
با سلام ...
خیلی مواقع نیاز پیدا می کنیم که یک برنامه رو محدود کنیم ، یا تعداد دفعات اجرای برنامه رو محدود کنیم یا ...
در این مقاله ی کوتاه قصد داریم روشی رو بررسی کنیم که در اون برنامه ی ما در هر بار اجرای ویندوز فقط یک بار اجرا بشه و برای اجرای دوباره نیاز به اجرای مجدد ( Restart ) ویندوز باشه !
یعنی فرض کنید کاربر وارد ویندوز شد و برنامه ی شما رو اجرا کرد ، حالا برای اجرای دوباره ی برنامه حتما باید کامپیوتر رو Restart کنه و ویندوز رو دوباره بالا بیاره ... !
این روش می تونه برای محدود کردن اجرای برنامه مناسب باشه ...

اما روش کار :
در ویندوز یک جدول سیستمی ( System-Defined Table ) وجود داره که هر برنامه ی ویندوزی می تونه در اون یک مقدار String رو قرار بده ، برنامه ای که یک مقدار String رو در این جدول ثبت میکنه از طرف ویندوز یک مقدار Integer به عنوان آدرس رشته ی ثبت شده در جدول دریافت میکنه و به وسیله ی اون عدد می تونه به مقدار ثبت شده دسترسی داشته باشه ، این جدول به Atom Table معروف هست ، این جدول همونطور که گفته شد یک مقدار String رو در خودش نگه می داره ، اما ویژگی ای که داره و ما از اون استفاده خواهیم کرد اینه که با شروع دوباره ( Restart ) ویندوز اطلاعات این جدول هم پاک می شن و مقدار های ذخیره شده در اون دیگه در دسترس نیستند ...
خوب ، امیدوارم روش کار رو حدس زده باشید ، ما باید با شروع برنامه یک مقدار String رو در این Table ثبت کنیم و با هر بار شروع برنامه چک کنیم که آیا این مقدار String در Table مذکور هست یا نه ، اگر وجود داشت ، پس برنامه قبلا اجرا شده و دیگه نباید اجرا بشه و اینجاست که باید برنامه رو ببندیم !

خوب ، در دلفی و در یونیت Windows توابعی برای کار با این Table وجود دارند ، که در زیر لیست برخی از اونها رو مشاهده می کنید :
  • GlobalAddAtom : این تابع یک مقدار رشته ( String یا PAnsiChar ) را گرفته و در جدول مذکور ثبت کرده و یک مقدار عددی به عنوان آدرس رشته ی ثبت شده بر می گرداند.
  • GlobalFindAtom : این تابع یک مقدار رشته را گرفته و آن را در Table ویندوز جستجو می کند ، اگر مقدار را پیدا کرد ، مقدار عددی مربوط به آدرس آن را به عنوان خروجی بر می گرداند ولی اگر رشته را در جدول پیدا نکرد ، مقدار 0 را به عنوان خروجی بر خواهد گرداند !
  • GlobalDeleteAtom : این تابع مقدار عددی مربوط به آدرس رشته ی درون جدول را گرفته و آن را از جدول حذف می کند.
خوب ، کار سختی در پیش نداریم ...
باید یونیت اصلی پروژه رو کمی دستکاری کنیم ، یونیت اصلی پروژه را باز کرده و یک متغیر از نوع THandle به عنوان مقدار عددی مربوط به آدرس رشته و یک ثابت با مقدار مثلا " THE-APP-HAVE-RUNED " در آن ثبت کنید ...
باید بعد از دستور Application.Initialize ، ابتدا مقدار رشته را در جدول ویندوز جستجو کنیم و اگر مقدار پیدا نشد یعنی خروجی تابع GlobalFindAtom برابر صفر بود ، برنامه رو اجرا كنیم ، در غیر این صورت مثلا پیغامی به کاربر نمایش می دیم و همینطور از اجرای برنامه جلوگیری می كنیم ...
به کد زیر دقت کنید :

program Atom_Table;

uses
  Forms, Windows,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

var
 MyAppAtom : THandle;

const
 MyAppString = 'THE-APP-EXECUTED';

begin
  Application.Initialize;
  MyAppAtom := GlobalFindAtom(MyAppString);
  if MyAppAtom = 0 then
   begin
    MyAppAtom := GlobalAddAtom(MyAppString);
    Application.CreateForm(TForm1, Form1);
    Application.Run;
   end
  else
   MessageBox(Application.Handle, 'You have runed the Application 1 time'+#13+
              'Please Restart Windows to Run the Application again !', '', MB_OK+MB_ICONINFORMATION);
end.

کد بالا سورس یونیت اصلی پروژه ای به نام Atom_Table است که تنها یک فرم دارد با نام Fom1 ..
اول از همه متذکر شوم که یونیت Windows را باید به قسمت Uses اضافه نمایید ...
در کد بالا ما یک متغیر و یک ثابت تعریف کردیم که وظایف آنها در بالا ذکر شد ! ، بعد از لود شدن برنامه ( Application.Initialize ) مقدار رشته را در جدول ویندوز جستجو کردیم ، و مقدار آن را در MyAppAtom قرار دادیم ، با یک دستور if چک کردیم که آیا مقدارش 0 هست یا نه ، اگر صفر بود برنامه ابتدا به وسیله ی تابع GlobalAddAtom رشته ی مورد نظر را در جدول مذکور ثبت میکند و سپس برنامه اجرا می شود ، اگر هم که مقدار برگشتی تابع GlobalFindAtom برابر صفر نبود ، یعنی برنامه قبلا اجرا شده که در این صورت پیغامی به کاربر نمایش داده می شود و برنامه اجرا نخواهد شد ...
نکته ی آخر اینکه همانطور که ذکر شد با تابع GlobalDeleteAtom می توانید مقدار رشته ی ثبت شده را حذف کنید ...

سورس نمونه ی این مقاله ی کوتاه رو هم می تونید از لینک زیر دانلود کنید :

امیدوارم مفید بوده باشه ...

موفق باشید ... 

 

 :: لینك ثابت نویسنده : محمود مهری نظرات Comment

مطالب اخیر

معرفی کانال و گروه های تلگرام
استفاده از Component Template ها در دلفی
مقاله : نحوه ی استفاده از پنل پیامک در نرم افزار
E-Book :: راه اندازی موتورهای DC و پله ای با استفاده از میکرو کنترلر AVR
آشنایی با عملگرهای بیتی ( Bitwise Operators )
تست دیود و ترانزیستور با مولتی متر
دلفی :: ارسال آرایه به حافظه ی Clipboard
یک سایت فوق العاده برای علاقه مندان به علم فیزیک
مداری برای نمایش عبور جریان برق از بدن !!
سال نو مبارک ...
آدرس وبلاگ !
ساخت یک LED فلاشر با میکروکنترلر AVR ATMega16A
آشنایی با کاربرد " رله " ( Relay ) در مدار
کار با ماتریسها در Matlab
SQL :: آشنایی با دستور شرطی WHERE


صفحات وبلاگ :